C# 在生成服务器上运行TextTransform.exe(T4)

C# 在生成服务器上运行TextTransform.exe(T4),c#,.net,visual-studio-2010,code-generation,t4,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.TextTem

我正在尝试设置一个流程,在该流程中,我的T4模板将在生成服务器上进行转换(那里没有安装Visual Studio)

我已经阅读了所有的在线参考资料,但无法获得一个明确的来源,说明如何做到这一点

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

  • TextTransform.exe引发一个关于缺少DLL的错误:
C:\TeamCity\buildAgent\work\AppSettings.tt(0,0):错误CS0006: 编译转换:元数据文件 'Microsoft.VisualStudio.TextTemplating.Interfaces.10.0, 版本=10.0.0.0,区域性=中性,PublicKeyToken=b03f5f7f11d50a3a' 找不到

使用gacutil注册DLL文件修复了这个问题,尽管我希望避免这个步骤

  • 在Visual Studio之外运行时,使用Host.ResolvePath(string)方法不会返回任何值
此方法有助于确定模板用作其数据源的.txt文件的完整路径。如果没有它,则无法在生成服务器上找到此文件

任何帮助都将不胜感激

编辑:打开了MS CONNECT问题:

我检查过的参考资料:


我认为问题在于您正在使用特定于主机的功能,如ResolvePath

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

可通过以下方式了解该著名位置:

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

如果您不喜欢强制DEVS安装环境变量的想法,我会考虑使用一个“聪明”的解决方案,如果可用的话,使用环境变量,否则依赖于主机。


希望这有助于摆脱Microsoft TextTransform.exe,使用MonoDevelop附带的无外部依赖的免费版本

请看这里:

  • 将以下目录从开发计算机复制到生成服务器

    来源(您的计算机):

    %CommonProgramFiles(x86)%\Microsoft共享\text模板\.0

    目标(生成服务器):

    %CommonProgramFiles(x86)%\Microsoft共享\text模板\.0

    其中,
    是最新版本

  • 将所有程序集(.dll)从开发计算机复制到生成服务器

    来源(您的计算机):
    %WinDir%\Microsoft.NET\assembly\GAC_MSIL\Microsoft.VisualStudio.text模板化。*

    目标(生成服务器):

    %CommonProgramFiles(x86)%\Microsoft共享\text模板\.0

    其中,
    *
    是目录名的其余部分

  • 使用将所有复制的程序集安装到生成服务器的GAC中


  • 我将在MS Connect上提出一个问题,因为他们关于MSDN(我发布的参考资料的最后一项)的文章似乎过时了,并且不能正常工作。这方面有什么进展吗?即使所有TextTransform程序集都在GAC中,但在未安装VS的服务器上仍然会出现完全例外的情况。您必须将程序集安装到GAC中。我也有同样的问题。对于我的简单场景,能够解析模板(.tt文件)的完整路径就足够了。输入文件通常会放在它旁边,或者放在与之相关的路径下。