T4 没有 Visual Studio?

问题描述 投票:0回答:7

我正在尝试将一些代码生成模板连接到我团队的自动构建过程。我们的 SCM 团队不希望在我们的构建机器上使用 Visual Studio(对此我很难争论)。

有没有办法在没有Visual Studio的情况下安装T4引擎?

.net t4
7个回答
41
投票

我为 MonoDevelop IDE 编写了一个完全逆向工程的 T4 引擎实现。它是开源的,根据宽松的 MIT/X11 许可证获得许可,因此您可以自由地将引擎嵌入到您的应用程序中或重新分发它。还有 TextTransform.exe 命令行工具的实现可用作 dotnet 全局工具,以及 Mono.TextTemplate 命名空间中的一些 API 来帮助托管引擎。

您可以从 NuGet 获取软件包 并且 源位于 GitHub 上


35
投票

我们实际上并没有生成代码...我们正在生成 Sandcastle 脚本,并且我们绝对希望在构建服务器上完成该操作。我们采用了一种方法,创建了一系列自定义属性,用这些属性来装饰我们的代码,以决定文档的生成方式。因此,我们有一组 .tt 文件来反映这些属性的程序集,并生成 Sandcastle 的输入文件 (.shfb)。我本可以使用自定义工具来完成此操作,但 T4 非常适合。

无论如何...我已经确认您可以在没有 Visual Studio 的情况下运行 TextTransform.exe。您所需要的只是 Microsoft.VisualStudio.TextTemplated.dll 存在。我创建了一个新的 VM,安装了 .NET 3.5,并将以下内容复制到文件系统:

  • 文本转换.exe
  • 文本模板.ico
  • Microsoft.VisualStudio.TextTemplate.dll
  • Test.tt(我创建的东西)

Test.tt 看起来像这样:

<#@ template language="C#3.5" debug="true" hostspecific="true" #>
<#@ assembly name="System.Xml" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Collections"#>
<#@ import namespace="System.Collections.Generic"#>
<#@ import namespace="System.Xml" #>
<#@ output  extension=".cs" #>

测试: <#=System.DateTime.Now.ToString()#>....

从虚拟机中我执行了 Test.tt,如下所示:

C:\TextTransform.exe 测试.tt

并且创建的 Test.cs 包含

测试:2009年6月10日下午5:33:32....

胜利!!!

最难的部分是找到 Microsoft.VisualStudio.TextTemplated.dll。我必须启动 FileMon 并在装有 Visual Studio 的盒子上执行一个模板。然后 FileMon 告诉我 TextTransform.exe 从哪里加载它。这可能存在于多个地方,但我在 GAC 中的 C:\Windows ssembly\GAC_MSIL\Microsoft.VisualStudio.TextTemplated\9.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.TextTemplated.dll 中找到了它。为了使用 Windows 资源管理器浏览到该位置,我必须创建一个如下所示的子目录:

subst X: C:\Windows sembly

然后我可以浏览到 X:\Windows ssembly\GAC_MSIL\Microsoft.VisualStudio.TextTemplated\9.0.0.0__b03f5f7f11d50a3a\ 并复制 dll。

无论如何...谢谢你的想法。希望有一天这能帮助其他可怜的灵魂:)


9
投票

这就是我最终采取的方法:

我有一台带有 Visual Studio 2010 sp1 的开发机器和一台构建机器(使用 msbuild)。

  1. 在开发机器上安装Visual studio 2010 sp1 sdk
  2. 在开发机器上安装 Microsoft Visual Studio 2010 可视化和建模 SDK
  3. 在构建机器上创建一个文件夹
  4. 将以下文件从开发计算机复制到构建计算机上的新文件夹:
    • \Program Files\Microsoft Visual Studio 2010 SDK\VisualStudioIntegration\Common\Assemblies 4.0\
      • Microsoft.VisualStudio.TextTemplate.10.0.dll
      • Microsoft.VisualStudio.TextTemplate.Interfaces.10.0.dll
      • Microsoft.VisualStudio.TextTemplate.VSHost.10.0.dll
    • \Program Files\MSBuild\Microsoft\VisualStudio\TextTemplate 10.0\
      • Microsoft.VisualStudio.TextTemplate.Sdk.Host.10.0.dll
    • \Program Files\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies\
      • Microsoft.VisualStudio.TextTemplate.Modeling.10.0.dll
    • \Program Files\Common Files\microsoft 共享\TextTemplate .0\
      • 文本转换.exe
      • TextTransform.ico

祝你一切顺利,可以出发了。


进一步阅读:



5
投票

我还没有尝试过,但我相信您能够使用命令行工具,将其放在构建服务器上,并在构建之前/期间转换您的模板。

http://msdn.microsoft.com/en-us/library/bb126461.aspx


5
投票

我的理解是您仍然需要安装 Visual Studio。为什么要逆流而行呢?您是否考虑过在设计时而不是构建时生成代码?


0
投票

12份只需复制

C:\Program Files (x86)\Common Files\Microsoft Shared\TextTemplated .0


0
投票

CodegenCS是T4模板的替代品,非常容易学习(全部基于C#和字符串插值),并提供非常可维护的脚本(没有废话缩进)。

© www.soinside.com 2019 - 2024. All rights reserved.