繁体   English   中英

MSBuild支持Visual Studio 2017 RTM中的T4模板

[英]MSBuild support for T4 templates in Visual Studio 2017 RTM

在Visual Studio 2015中,我使用的是NuGet包Unofficial.Microsoft.VisualStudio.TextTemplating.14.0.0 ,它允许我在构建项目时直接从MSBuild转换T4模板。

但是,在Visual Studio 2017 RTM中,这会使用以下消息中断构建:

An Exception was thrown while running the transformation code. The process cannot continue. The following Exception was thrown: System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.CodeAnalysis, Version=1.3.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified. File name: 'Microsoft.CodeAnalysis, Version=1.3.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'

这是由此软件包中的Unofficial.Microsoft.VisualStudio.TextTemplating.targets(396,5)文件引发的。

我的猜测是,由于环境不匹配,尝试使用VS 2017版本中的这些目标会产生错误,但我不知道如何追踪确切的问题。 我可以看到v15还没有更新的包。

如何从MSBuild进行适用于VS 2017的T4变换? NuGet会有一个新的软件包在某个时候使用,还是不再支持?

我找到了正确的解决方案。

事实证明,T4 SDK现在作为Visual Studio 2017的一部分包含在内(并且不像过去那样是单独的Modeling SDK的一部分),但是您必须通过VS2017安装程序中的Visual Studio extension development工具集进行安装。 (文本模板转换功能)。

安装完成后,您可以使用MSBuild通过将相关目标导入MSBuild项目来转换模板:

<PropertyGroup>
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">15.0</VisualStudioVersion>
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
    <TransformOnBuild>True</TransformOnBuild>
    <TransformOutOfDateOnly>false</TransformOutOfDateOnly>
</PropertyGroup>

<!-- add AFTER import for $(MSBuildToolsPath)\Microsoft.CSharp.targets -->
<Import Project="$(VSToolsPath)\TextTemplating\Microsoft.TextTemplating.targets" />

这解决了我的问题,也消除了对单独的非官方NuGet包的需求。

我遇到了类似的问题。 我的T4不会在构建时生成,但会保存。 这很奇怪,因为我没有得到错误,但在阅读@Sam的回答后,我发现我的VS安装有问题。 我是对的。 VS 2017 15.9.4安装在自己的安装目录中,但不会将Tools复制到VSToolsPath文件夹。 相反,它只是将它们留在原地。 所以,对我来说,正确的解决方案是使用此<Import Project="$(MSBuildToolsPath)\\Microsoft.CSharp.targets" /> <Import Project="$(VsInstallRoot)\\MSBuild\\Microsoft\\VisualStudio\\v15.0\\TextTemplating\\Microsoft.TextTemplating.targets" />

T4Executer执行此操作,您可以在构建之前或之后设置要执行的模板,或者设置不应在构建时运行哪些模板。 VS2017-19

我有一个类似的问题,我的Visual Studio Team Service上的托管代理没有生成模板输出,从而破坏了我的构建服务器,因为它缺少生成的CS文件。

在我的开发机器上从Visual Studio 2015构建时,CS模板输出生成正常。

看看上面的各种解决方案,我很清楚,更方便的解决方案就是将生成的文件提交给我的源代码控制系统 这有一个额外的好处,我可以编码检查输出中的任何更改,而不仅仅是模板。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM