我能否在我的产品中重新分发Microsoft T4引擎?

6

我正在动态生成代码,目前使用String.Format和嵌入占位符 - 但是重新格式化C#代码以用作模板很麻烦,我认为使用T4模板会更好。

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

有其他人做过这个吗?或者知道(法律)答案?


1
T4 redistributable的(EULA)许可证有什么说法?是否有可再分发版本? - David Schmitt
这就是问题所在 - 我还没有找到其中任何一个(至今为止)。我知道它一定被内部打包在微软中,因为它刚刚被用于他们的新P&P蓝图产品中。 - Rammesses
7个回答

5

看起来很快就会有另一种选择。

昨天,Miguel de Icaza发布了与T4集成的MonoDevelop的相关信息,因此我预计很快就会有一个Mono等效的T4工具集。

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


这个已经发布了,你可以从MonoDevelop存储库获取源代码。快速编译一下 .Net 并(稍微折腾一下),你就可以为你的项目获得一个相当易于使用的 T4 引擎。我想我应该写一篇如何博客文章来让它工作起来。 - Rammesses

3
您可以将T4作为DSLToolsRedist的一部分重新分发,但是需要已安装Visual Studio 2005标准版或更高版本。 我认为目前在没有安装Visual Studio的情况下不能合法地重新分发T4。您所描述的场景将在Visual Studio 2010中得到直接支持

2
为了清楚起见,官方答案是,你不能将Microsoft T4引擎作为单独的组件与Visual Studio分开发布。
然而,从Visual Studio 2010开始,你可以使用和重新分发预编译的模板,这些模板不依赖于Visual Studio。
你也可以在安装了Visual Studio的机器上,在Visual Studio之外使用T4。
你还可以免费获得Visual Studio隔离外壳的许可证并重新分发它,并将其用作工具的主机——其中包括T4。
从Visual Studio 2010 SP1开始,你有权通过VS安装目录下的buildserver.txt文件中的许可证将T4复制到构建机器上。

请问您能否澄清一下关于Visual Studio隔离外壳的问题。这个说法是否有效地意味着“是的,您可以免费重新分发T4”? - Andy
您不能拆分孤立的“shell”,它是用于创建和分发托管在该“shell”中的工具的,但T4显然是其中的一部分。 - GarethJ

2

很抱歉,我有答案,但与Oleg所说的不一样。 (顺便说一下,Oleg在T4上的工作非常出色)。你目前无法重新分发T4-它是VS的一部分。 在VS2010中,将能够预编译T4模板,然后使用没有T4依赖性的应用程序重新分发这些预编译的模板。


1

我有自己的模板代码生成器系统,可以在VS2008发布之前的单独应用程序域中编译代码。

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

使用我的模板引擎的代码在这里,您可以使用Web浏览器浏览它或将Subversion客户端指向它。 请注意,以here开头的链接确实在单词后停止,但服务器端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。


0

0

这真是太遗憾了,正如Oleg所指出的那样,如果没有经过测试,你怎么能发布它呢。

Lassevk,我当然很感兴趣 - 我正在考虑重新设计一个我10年前构建的模板引擎,但我总是喜欢更轻松的生活!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接