我最近将测试项目迁移到.NET Core 2.0.该测试项目使用文本模板生成一些重复的代码.之前的项目有一个构建目标,可以在构建之前生成所有T4模板.因此,生成的代码也不会签入VCS.
我在项目中使用了这个片段来确保构建模板:
<PropertyGroup>
<!-- Default VisualStudioVersion to 15 (VS2017) -->
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">15.0</VisualStudioVersion>
<!-- Determinate VSToolsPath -->
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
<!-- Run T4 generation if there are outdated files -->
<TransformOnBuild>True</TransformOnBuild>
<TransformOutOfDateOnly>True</TransformOutOfDateOnly>
</PropertyGroup>
<!-- Import TextTemplating target -->
<Import Project="$(VSToolsPath)\TextTemplating\Microsoft.TextTemplating.targets" />
Run Code Online (Sandbox Code Playgroud)
我的第一个方法是保留这个片段并将其复制到新的.NET Core项目文件中.
在Visual Studio中,这很有效,因为显然,VSToolsPath设置正确.但是,当我运行.NET Core SDK工具时dotnet test(例如我在构建服务器上),VSToolsPath映射到Program Files\dotnet\sdk\2.0.3那里,无法找到文本模板目标.
因为这不起作用,我也尝试简单地Microsoft.VisualStudio.TextTemplating从Nuget 安装包,但这有两个问题: