在构建服务器上运行 TextTransform.exe (T4)
Posted
技术标签:
【中文标题】在构建服务器上运行 TextTransform.exe (T4)【英文标题】:Running TextTransform.exe (T4) on a build server 【发布时间】:2012-05-31 00:37:48 【问题描述】:我正在尝试设置一个流程,在该流程中我的 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 问题:https://connect.microsoft.com/VisualStudio/feedback/details/744137/texttransform-exe-does-not-work-without-vs2010-installed
我检查过的参考资料:
Get Visual Studio to run a T4 Template on every build T4 without Visual Studio? http://msdn.microsoft.com/en-us/library/ee847423.aspx#buildserver【问题讨论】:
我将在 MS Connect 上提出一个问题,因为他们在 MSDN 上的文章(我发布的参考资料中的最后一项)似乎已过时且无法正常工作。 这方面有什么进展吗?即使所有 TextTransform 程序集都在 GAC 中,我们仍然在没有安装 VS 的服务器上得到确切的异常。 您必须将程序集安装到 GAC 中。我有同样的问题。 【参考方案1】:我认为问题在于您使用的是主机特定功能,例如 ResolvePath。
我会尝试的一种方法是确保模板不使用 ResolvePath,而是依赖于来自知名位置的相对路径。
这个众所周知的位置可能被以下人知道:
1. Convention
2. Environment variable
3. Registry
4. SQL Server
5. Web Service
6. And others
如果您不喜欢强制开发人员设置环境变量的想法,我会考虑制作一个“智能”解析路径,该路径使用环境变量(如果可用),否则依赖 Host.ResolvePath。
希望对你有帮助
【讨论】:
对于我的简单场景,能够解析模板(.tt 文件)完整路径就足够了。输入文件通常会放在它旁边,或者放在相对于它的路径下。【参考方案2】:放弃 Microsoft TextTransform.exe 并使用 MonoDevelop 附带的免费的,没有外部依赖项。
请看这里:T4 without Visual Studio?
【讨论】:
【参考方案3】:将以下目录从您的开发机器复制到构建服务器。
来源(您的机器):
%CommonProgramFiles(x86)%\Microsoft Shared\TextTemplating\<version>.0
目标(构建服务器):
%CommonProgramFiles(x86)%\Microsoft Shared\TextTemplating\<version>.0
<version>
是最新版本。
将所有程序集 (.dll) 从您的开发机器复制到构建服务器。
来源(您的机器):
%WinDir%\Microsoft.NET\assembly\GAC_MSIL\Microsoft.VisualStudio.TextTemplating.*
目标(构建服务器):
%CommonProgramFiles(x86)%\Microsoft Shared\TextTemplating\<version>.0
其中*
是目录名的其余部分。
使用Gacutil /i将所有复制的程序集安装到构建服务器的GAC中。
【讨论】:
以上是关于在构建服务器上运行 TextTransform.exe (T4)的主要内容,如果未能解决你的问题,请参考以下文章
TFS 2010 构建控制器和构建代理可以在 Server 2012 上运行吗?
无法在 Windows 服务器上使用 docker 为 gitlab-ci 运行构建