我正在动态生成代码,目前使用String.Format和嵌入占位符 - 但是重新格式化C#代码以用作模板很麻烦,我认为使用T4模板会更好。
然而,代码生成将在运行系统上进行,因此我需要知道是否可以安全且合法地与我的产品一起重新分发Microsoft T4引擎。
有其他人做过这个吗?或者知道(法律)答案?
我正在动态生成代码,目前使用String.Format和嵌入占位符 - 但是重新格式化C#代码以用作模板很麻烦,我认为使用T4模板会更好。
然而,代码生成将在运行系统上进行,因此我需要知道是否可以安全且合法地与我的产品一起重新分发Microsoft T4引擎。
有其他人做过这个吗?或者知道(法律)答案?
看起来很快就会有另一种选择。
昨天,Miguel de Icaza发布了与T4集成的MonoDevelop的相关信息,因此我预计很快就会有一个Mono等效的T4工具集。
很抱歉,我有答案,但与Oleg所说的不一样。 (顺便说一下,Oleg在T4上的工作非常出色)。你目前无法重新分发T4-它是VS的一部分。 在VS2010中,将能够预编译T4模板,然后使用没有T4依赖性的应用程序重新分发这些预编译的模板。
我有自己的模板代码生成器系统,可以在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。
我回想起在2006年(还不知道什么是T4!)时曾经出现过这种情况,于是我去搜寻并找到了这个http://social.msdn.microsoft.com/Forums/en-US/vsx/thread/1ab0bf3f-2810-4adf-bf75-900b98dee8e2/。不幸的是gotdotnet链接已经失效。很难说在那个主题中他们是否同意您可以在VS之外合法地托管和重新分发T4。
这真是太遗憾了,正如Oleg所指出的那样,如果没有经过测试,你怎么能发布它呢。
Lassevk,我当然很感兴趣 - 我正在考虑重新设计一个我10年前构建的模板引擎,但我总是喜欢更轻松的生活!