Visual studio 2017 .Net核心项目中的文本模板目标

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)

我最近将一个测试项目迁移到.NETCore2.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" />

15
$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
真的
真的
我的第一种方法是保留这个片段并将其复制到新的.NET核心项目文件中

在VisualStudio中,这是因为显然,
VSToolsPath
设置正确。但是,当我运行.NET核心SDK工具时,例如
dotnet test
(就像我在构建服务器上所做的那样),
VSToolsPath
映射到
程序文件\dotnet\SDK\2.0.3
,在那里找不到文本模板目标

因为这不起作用,我还尝试从Nuget安装Microsoft.VisualStudio.TextTemplating包,但有两个问题:

  • 它不正式支持.NET Core并安装.NET 4.6.1和
  • Nuget似乎没有安装任何东西,因此我无法调整项目文件中的路径

  • 你将任由为dotnet core编写端口的人摆布

    这是古老的:


    或者完全使用不同的模板工具,尽管我当然知道这不是一个选项。

    要在构建
    dotnet build
    时支持构建T4模板,您需要使用.NET Core()已经存在的
    自定义文本模板主机。要将其包括在内,请将以下内容添加到项目的任何
    ItemGroup
    元素中:
    。 由于VisualStudio已经有了自己的
    文本模板主机
    实现,因此您添加的元素应该只适用于.NET Core。例如:

    
    
    同时,您应该对Visual Studio文本模板主机的.NET核心设置进行调整,如下所示:
    condition=“$(MSBuildRuntimeType)”==“Full”

    您还应该在导入Microsoft.TextTemplating.targets之前添加
    ,以使Visual Studio中的.NET Core
    csproj
    一切正常工作

    如果您需要能够清理所有生成的代码,您应该将模板从
    *.tt
    重命名为
    *.generated.tt
    ,所有代码都将在
    *.generated.cs
    下生成,并且可以在
    dotnet clean
    操作中过滤掉这些文件

    您的
    csproj
    中的完整示例:

    
    $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
    真的
    真的
    假的
    
    如果不想重命名模板文件且不需要清理它们,请替换:

    
    
    与:

    
    
    并删除:

    
    
    有关更多信息,请参阅:

    如何在
    dotnet build
    上设置代码生成:

    如何在Visual Studio和.NET Core的内部版本上设置代码生成
    csproj

    从单个T4模板生成多个文件的完整示例:

    更新:


    .

    或直接使用。您可以设置在生成之前、生成之后或忽略特定模板时要执行的模板。VS2017-19运行良好

    您找到解决方案了吗?