6

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

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

还有人这样做吗?或者知道(法律)答案?

4

7 回答 7

5

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

昨天,Miguel de Icaza 发布了关于 MonoDevelop 中 T4 集成的文章,所以我期待现在任何时候都会有一个等效的单声道 T4 工具集。

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

于 2009-03-12T09:42:40.177 回答
3

您可以将 T4​​ 作为DSLToolsRedist的一部分重新分发,但是,它需要已安装 Visual Studio 2005 标准版或更高版本。我不相信 T4 目前可以在没有 Visual Studio 的情况下合法地重新分发。Visual Studio 2010将直接支持您描述的方案

于 2009-01-14T14:32:03.617 回答
2

我有答案,不幸的是,正如 Oleg 所建议的那样。(顺便说一句,在 T4 上做得很好)。您此时不能重新分发 T4 - 它是 VS 的一部分。在 VS2010 中,可以预编译 T4 模板,然后使用您的应用程序重新分发这些预编译的模板,而无需 T4 依赖来运行它们。

于 2009-01-15T10:10:05.173 回答
2

为清楚起见,官方的回答是您不能将 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 复制到您的构建机器。

于 2011-01-15T22:47:50.240 回答
1

我有自己的模板代码生成系统,在一个单独的 appdomain 中编译代码,从 VS2008 出来之前开始。

如果您有兴趣,请发表评论,我将发布代码的网址。

使用我的模板引擎的代码在这里,您可以使用 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。

于 2009-01-15T10:21:24.277 回答
0

我记得这是在 2006 年出现的(在我知道 T4 是什么之前!)并去搜索并找到了这个http://social.msdn.microsoft.com/Forums/en-US/vsx/thread/1ab0bf3f-2810-4adf -bf75-900b98dee8e2/不幸的是,gotdotnet 链接已损坏。很难说他们是否在该线程中同意您可以合法地在 VS 之外托管 T4 并重新分配 - 或不。

于 2009-01-14T17:46:29.463 回答
0

这是一个真正的耻辱,但正如 Oleg 指出的那样,如果它未经测试,那么你怎么能发布它。

Lassevk,当然我很感兴趣 - 正在考虑重新散列我大约 10 年前构建的模板引擎,但我总是为更轻松的生活而奋斗!

于 2009-01-15T12:00:07.760 回答