代码之家  ›  专栏  ›  技术社区  ›  Rammesses

我可以将Microsoft T4引擎与我的产品一起重新分发吗?[关闭]

t4 c#
  •  6
  • Rammesses  · 技术社区  · 16 年前

    我正在动态生成代码,目前使用的是string.format和嵌入占位符,但是重新格式化C代码以用作模板是一件很困难的事情,我认为使用T4模板会更好。

    但是,代码生成将在运行的系统上进行,因此我需要知道,我可以安全合法地将Microsoft T4引擎与我的产品一起重新分发。

    还有人做过这个吗?或者知道(合法的)答案?

    7 回复  |  直到 12 年前
        1
  •  5
  •   Rammesses    16 年前

    看来很快就会有另一个选择了。

    昨天,MiguelDeIcaza发布了关于MonoDevelopment中t4集成的消息,所以我希望现在随时都有一个与之等效的t4工具集。

    见: http://tirania.org/blog/archive/2009/Mar-10.html

        2
  •  3
  •   Oleg Sych    16 年前

    您可以将t4作为 DSLToolsRedist 但是,它要求已安装Visual Studio 2005标准版或更高版本。我不认为T4在没有Visual Studio的情况下可以合法地重新分配。您描述的场景将是 directly supported in Visual Studio 2010

        3
  •  2
  •   Eric Nelson    16 年前

    我有答案,但不幸的是,并不像奥列格建议的那样。(奥列格在T4上做得很好)。此时不能重新分发t4-它是vs.的一部分。在vs2010中,可以预编译t4模板,然后用不依赖t4的应用程序重新分发这些预编译模板来运行它们。

        4
  •  2
  •   GarethJ    14 年前

    为了清楚起见,官方的答案是,您不能将Microsoft T4引擎作为独立于Visual Studio的组件分发。

    但是,从Visual Studio 2010开始,您可以使用并重新分发预编译的模板,这些模板不依赖于Visual Studio。

    也可以在安装了Visual Studio的计算机上在Visual Studio外部使用T4。

    您还可以免费许可和重新发布Visual Studio独立shell,并将其用作工具的宿主—它包括t4。

    自Visual Studio 2010 SP1起,您有权通过VS安装目录中buildserver.txt中的许可证将T4复制到生成计算机。

        5
  •  1
  •   Lasse V. Karlsen    15 年前

    我有自己的模板代码生成器系统,在一个单独的AppDomain中编译代码,这是在VS2008发布之前完成的。

    如果您感兴趣,请发表评论,我将发布代码的URL。

    使用模板引擎的代码是 here ,您可以使用Web浏览器或点 Subversion 客户端在它。 注意,从这里开始的链接确实会在单词后停止,但是服务器端的WMD渲染器会将链接泄漏到下面的文本中。

    请注意,如果您只是复制该命名空间中的单个文件,那么它将不会自行编译,它需要lvk.delegates和lvk.scripting中的一些内容,命名空间将从上面的链接上升到两个级别。如果你不想吞下整个图书馆,你需要一次提取出它抱怨的部分,直到它编译。

    图书馆的二进制版本也在 /LVK_3_5/trunk/Binaries/Debug/LVK 在同一个存储库中。如果你下载了它,它就像添加一个对它的引用和检查类一样简单。 LVK.Text.Templates.TextTemplate .

    不幸的是,我现在没有任何关于我的图书馆的例子。

    基本上,要使用模板:

    TextTemplate tt = new TextTemplate();
    tt.Source = "... code here, check example file above ...";
    tt.Compile();
    String output = tt.Generate(singleObjectParameter);
    

    在模板中,基本上是所有插入到单个方法中的代码(这意味着,就可以轻松添加方法而言,它不如T4好,但可以使用匿名方法),您可以访问作为名为data的参数传递给它的数据对象。

    所以只输出传递参数的内容:

    <%= data %>
    

    重复它:

    <% for (Int32 index = 0; index < 10; index++) { %>
    <%= data %>
    <% } %>
    

    如果您有问题,请发送到我的电子邮件lasse@vkarlsen.no。

        6
  •  0
  •   Eric Nelson    16 年前

    我记得这是2006年的事(在我知道T4是什么之前!)去寻找找到这个 http://social.msdn.microsoft.com/Forums/en-US/vsx/thread/1ab0bf3f-2810-4adf-bf75-900b98dee8e2/ 不幸的是gotdotnet链接断开了。很难说他们是否同意你可以合法地比VS托管T4并重新分配——或者不合法。

        7
  •  0
  •   Rammesses    16 年前

    这是一个真正的耻辱,但正如奥列格指出的,如果它没有经过测试,那么你如何才能释放它。

    拉塞夫克,当然我很感兴趣-我在考虑重新安装一个模板引擎,我建立了大约10年前,但我总是为一个更容易的生活!