我之前发现过这个问题,但我遇到的所有答案都是特定于早期版本的Visual Studio。似乎主要是VS2015及更早版本。
大多数答案的主要问题是它们依赖于Microsoft.TextTemplating.targets和/或TextTransform.exe的存在,以前在早期版本的Visual Studio中安装,而VS2017不再安装相应的目录或文件;从我的理解来看,这是由于这方面的架构变化。
我试图使用Clarius.TransformOnBuild并且它工作正常(一次)但后来开始抛出一个" TransformOnBuildTask"任务失败是由于某些访问被拒绝的问题,我见过其他人。
降级到该软件包的早期版本可以解决该错误,但之后它也不会在构建上运行TextTemplatingFileGenerator。这似乎不是一种非常可靠的方法。
Hadn没有像其他人所建议的那样尝试使用AutoT4,因为该方法需要简单,并且不需要所有开发团队成员修改他们的环境。
其他解决方案建议将TextTransform.exe添加到%PATH%变量,这又要求团队对其环境执行mod。更不用说由于第一点我没有TextTransform.exe,并且无法保证团队中的其他开发人员也会这样做。每个人都在运行VS2017
我只需要一个非常简单的方法就可以在任何构建过程中执行项目中的所有.tt文件,而无需整个开发团队为此工作制作单独的系统mod。
如果其他人都有类似的要求在VS2017下运行,我对该解决方案感兴趣。
答案 0 :(得分:7)
如何在Build(VS 2017)上运行TextTemplatingFileGenerator
正如您所知,如果您想在构建期间执行项目中的所有.tt
个文件,则必须使用Microsoft.TextTemplating.targets
,TextTransform.exe
,AutoT4
或任何其他延伸。所有这些方法都要求我们的开发团队或多或少地配置他们的环境。
为了减少开发团队成员的个人配置,我们通常使用Microsoft.TextTemplating.targets
。由于T4 SDK现在作为Visual Studio 2017的一部分包含在内(并且不像过去那样是单独的Modeling SDK的一部分),因此我们必须通过VS2017安装程序中的Visual Studio extension development
工具集进行安装(文本模板转换功能):
安装此工作负载后,您可以使用MSBuild通过将相关目标导入MSBuild项目来转换模板:
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
<TransformOnBuild>true</TransformOnBuild>
<OverwriteReadOnlyOutputFiles>true</OverwriteReadOnlyOutputFiles>
<TransformOutOfDateOnly>false</TransformOutOfDateOnly>
</PropertyGroup>
<!-- This is the important line: -->
<Import Project="$(VSToolsPath)\TextTemplating\Microsoft.TextTemplating.targets" />
有关详细信息,请参阅Code Generation in a Build Process。
希望这有帮助。
答案 1 :(得分:2)
在Visual Studio 2017中(可能也是下一版本),您应该在Pre-build事件中添加它:
"$(DevEnvDir)TextTransform.exe" -out "$(ProjectDir)YourTemplate.cs" "$(ProjectDir)YourTemplate.tt"
简单的解决方案,无需安装Visual Studio扩展开发。
p.s。如果模板不在根项目目录中,请更改其路径。