Mar*_*ark 4 c# msbuild c#-4.0 visual-studio-2017
我之前发现了这个问题,但我遇到的所有答案都是特定于早期版本的Visual Studio.似乎主要是VS2015及更早版本.
大多数答案的主要问题是它们依赖于Microsoft.TextTemplating.targets和/或TextTransform.exe的存在,以前安装的早期版本的Visual Studio和VS2017不再安装相应的目录或文件; 从我的理解来看,这是由于这方面的架构变化.
我试图使用Clarius.TransformOnBuild并且它工作正常(一次)但由于一些访问被拒绝的问题,我已经看到其他人已经开始抛出"TransformOnBuildTask"任务失败.
降级到该软件包的早期版本可以解决该错误,但之后它也不再在构建上运行TextTemplatingFileGenerator.这似乎不是一个非常可靠的方法.
没有像其他人建议的那样尝试使用AutoT4,因为该方法需要简单,并且不需要所有开发团队成员修改他们的环境.
其他解决方案建议将TextTransform.exe添加到%PATH%变量,这也需要团队对其环境执行mod.更不用说由于第一点我没有TextTransform.exe这一事实,并且无法保证团队中的其他开发人员也会如此.每个人都在运行VS2017
我只需要一个非常简单的方法就可以在任何构建过程中执行我的项目中的所有.tt文件,而无需整个开发团队为此工作制作单独的系统mod.
如果其他人都有类似的要求在VS2017下运行,我会对解决方案感兴趣.
如何在Build(VS 2017)上运行TextTemplatingFileGenerator
正如你知道的,如果你想执行所有的.tt构建过程中,你的项目文件,你必须使用Microsoft.TextTemplating.targets,TextTransform.exe,AutoT4或任何其他分机.所有这些方法都要求我们的开发团队或多或少地配置他们的环境.
为了减少开发团队成员的个人配置,我们通常使用Microsoft.TextTemplating.targets.由于T4 SDK现在作为Visual Studio 2017的一部分包含在内(并且不像过去那样是单独的Modeling SDK的一部分),因此我们必须通过Visual Studio extension developmentVS2017安装程序中的工具集安装它(文本模板转换功能) :
安装此工作负载后,您可以使用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" />
有关详细信息,请参阅构建过程中的代码生成
希望这可以帮助.