我可以使用我的产品重新分发Microsoft T4引擎吗?

时间:2009-01-14 13:55:43

标签: c# t4

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

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

其他人这样做了吗?或者知道(合法)答案?

7 个答案:

答案 0 :(得分:5)

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

昨天,Miguel de Icaza在MonoDevelop上发布了关于T4集成的内容,所以我希望现在可以随时使用单声道等效的T4工具集。

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

答案 1 :(得分:3)

您可以将T4重新分发为DSLToolsRedist的一部分,但是,它需要安装Visual Studio 2005标准版或更高版本。我不相信在没有Visual Studio的情况下,T4可以在法律上重新分发。您描述的方案将是directly supported in Visual Studio 2010

答案 2 :(得分:2)

我有答案,不幸的是,这不是Oleg的建议。 (通过Oleg的方式在T4上做了很多工作)。你不能在这个时候重新分配T4--它是VS的一部分。在VS2010中,可以预编译T4模板,然后使用没有T4依赖关系的应用程序重新分发这些预编译模板来运行它们。

答案 3 :(得分:2)

为清楚起见,官方的答案是您不能将Microsoft T4引擎作为Visual Studio中的单独部分进行分发。

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

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

您还可以免费许可和重新分发Visual Studio Isolated Shell,并将其用作工具的主机 - 它包括T4。

从Visual Studio 2010 SP1开始,您被许可通过VS安装目录中buildserver.txt中的许可证将T4复制到构建计算机。

答案 4 :(得分:1)

我有自己的模板代码生成器系统,在VS2008发布之前,在单独的appdomain中编译代码。

如果您有兴趣,请发表评论,我会在代码中发布网址。

使用我的模板引擎的代码是here,您可以使用网络浏览器浏览它或指向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。

答案 5 :(得分:0)

我记得这是在2006年出现的(在我知道T4是什么之前!)并且进行了搜索并发现了这个http://social.msdn.microsoft.com/Forums/en-US/vsx/thread/1ab0bf3f-2810-4adf-bf75-900b98dee8e2/不幸的是,gotdotnet链接被破坏了。很难说在那个帖子里他们同意你可以合法地托管VS的T4并重新分配 - 或者不是。

答案 6 :(得分:0)

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

Lassevk,当然我很感兴趣 - 正在考虑重新制作我大约10年前制作的模板引擎,但我总是想要过上更轻松的生活!