在构建服务器上运行TextTransform.exe(T4)

时间:2012-05-24 12:14:07

标签: c# .net visual-studio-2010 code-generation t4

我正在尝试设置一个进程,我的T4模板将在构建服务器上进行转换(Visual Studio未安装在那里)。

我已经阅读了所有在线参考文献,但无法获得显示如何执行此操作的明确来源。

具体来说,这是我遇到的两个问题:

  • TextTransform.exe会抛出有关缺少DLL的错误:
  

C:\ TeamCity \ buildAgent \ work \ AppSettings.tt(0,0):错误CS0006:   编译转换:元数据文件   “Microsoft.VisualStudio.TextTemplating.Interfaces.10.0,   Version = 10.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'   无法找到

使用 gacutil 注册DLL文件修复了这个问题,虽然我想避免这一步。

  • 使用 Host.ResolvePath(string)方法在Visual Studio外部运行时不返回任何值。

此方法有助于确定模板用作其数据源的.txt文件的完整路径。如果没有它,则无法在构建服务器上找到此文件。

任何帮助都会受到赞赏。

编辑:打开了MS CONNECT问题:https://connect.microsoft.com/VisualStudio/feedback/details/744137/texttransform-exe-does-not-work-without-vs2010-installed

我已查看参考资料:

3 个答案:

答案 0 :(得分:2)

我认为问题在于您使用的是ResolvePath等主机特定功能。

我尝试的一种方法是确保模板不使用ResolvePath,而是依赖于来自众所周知位置的相对路径。

这个众所周知的位置可以通过以下方式获知:

1. Convention
2. Environment variable
3. Registry
4. SQL Server
5. Web Service
6. And others

如果您不喜欢强制开发设置环境变量的想法,我会考虑使用环境变量“智能”解析路径(如果可用),否则依赖于Host.ResolvePath。

希望这有帮助

答案 1 :(得分:1)

抛弃Microsoft TextTransform.exe并使用MonoDevelop附带的免费外接程序。

见这里:T4 without Visual Studio?

答案 2 :(得分:0)

  1. 将以下目录从开发计算机复制到构建服务器。

    来源(您的机器):

    %CommonProgramFiles(x86)%\Microsoft Shared\TextTemplating\<version>.0

    目的地(构建服务器):

    %CommonProgramFiles(x86)%\Microsoft Shared\TextTemplating\<version>.0

    <version>是最新版本。

  2. 将所有程序集(.dll)从开发计算机复制到构建服务器。

    来源(您的机器): %WinDir%\Microsoft.NET\assembly\GAC_MSIL\Microsoft.VisualStudio.TextTemplating.*

    目的地(构建服务器):

    %CommonProgramFiles(x86)%\Microsoft Shared\TextTemplating\<version>.0

    其中*是目录名称的其余部分。

  3. 使用Gacutil /i将所有复制的程序集安装到构建服务器的GAC中。