Visual studio 2017 .Net核心项目中的文本模板目标
我最近将一个测试项目迁移到.NETCore2.0。该测试项目使用文本模板生成一些重复代码。上一个项目的构建目标是在构建之前生成所有T4模板。因此,生成的代码也不会签入VCS 我在项目中使用了此代码段以确保生成模板:Visual studio 2017 .Net核心项目中的文本模板目标,visual-studio-2017,.net-core,t4,Visual Studio 2017,.net Core,T4,我最近将一个测试项目迁移到.NETCore2.0。该测试项目使用文本模板生成一些重复代码。上一个项目的构建目标是在构建之前生成所有T4模板。因此,生成的代码也不会签入VCS 我在项目中使用了此代码段以确保生成模板: <PropertyGroup> <!-- Default VisualStudioVersion to 15 (VS2017) --> <VisualStudioVersion Condition="'$(VisualStudioVersion)
<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" />
15
$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
真的
真的
我的第一种方法是保留这个片段并将其复制到新的.NET核心项目文件中
在VisualStudio中,这是因为显然,VSToolsPath
设置正确。但是,当我运行.NET核心SDK工具时,例如dotnet test
(就像我在构建服务器上所做的那样),VSToolsPath
映射到程序文件\dotnet\SDK\2.0.3
,在那里找不到文本模板目标
因为这不起作用,我还尝试从Nuget安装Microsoft.VisualStudio.TextTemplating包,但有两个问题:
你将任由为dotnet core编写端口的人摆布 这是古老的:
或者完全使用不同的模板工具,尽管我当然知道这不是一个选项。要在构建
dotnet build
时支持构建T4模板,您需要使用.NET Core()已经存在的自定义文本模板主机。要将其包括在内,请将以下内容添加到项目的任何ItemGroup
元素中:
。
由于VisualStudio已经有了自己的文本模板主机
实现,因此您添加的元素应该只适用于.NET Core。例如:
同时,您应该对Visual Studio文本模板主机的.NET核心设置进行调整,如下所示:condition=“$(MSBuildRuntimeType)”==“Full”
您还应该在导入Microsoft.TextTemplating.targets之前添加
,以使Visual Studio中的.NET Corecsproj
一切正常工作
如果您需要能够清理所有生成的代码,您应该将模板从*.tt
重命名为*.generated.tt
,所有代码都将在*.generated.cs
下生成,并且可以在dotnet clean
操作中过滤掉这些文件
您的csproj
中的完整示例:
$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
真的
真的
假的
如果不想重命名模板文件且不需要清理它们,请替换:
与:
并删除:
有关更多信息,请参阅:
如何在dotnet build
上设置代码生成:
如何在Visual Studio和.NET Core的内部版本上设置代码生成csproj
:
从单个T4模板生成多个文件的完整示例:
更新:
.或直接使用。您可以设置在生成之前、生成之后或忽略特定模板时要执行的模板。VS2017-19运行良好您找到解决方案了吗?