如何在构建时的Blazor项目中运行T4模板

问题描述

我有一个Blazor项目,该项目带有T4模板,该模板是我为自动搭建一些代码而编写的。在Visual Studio中,它的效果很好,但是我必须修改并保存模板才能使其再次运行(如记录和预期的那样)。

在构建项目时,我也想运行模板,因此必须使用MSBuild而不是VS运行模板。我浏览了许多有关该主题文章,看来我不得不重新导入认目标as explained here

我在.csproj文件的顶部添加了以下内容,这是事情进展顺利的时候了:

<Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk.Web" />

这是我得到的错误

无法识别TargetFramework值'netstandard2.1'。有可能 拼错了。如果不是,则TargetFrameworkIdentifier和/或 必须指定TargetFrameworkVersion属性 明确地。 TestProject C:\ Program 文件\ dotnet \ sdk \ 3.1.401 \ Sdks \ Microsoft.NET.Sdk \ targets \ Microsoft.NET.TargetFrameworkInference.targets 93

.csproj完整文件

<Project Sdk="Microsoft.NET.Sdk.Web">

    <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk.Web" />
    
    <PropertyGroup>
        <TargetFramework>netstandard2.1</TargetFramework>
        <RazorLangVersion>3.0</RazorLangVersion>
    </PropertyGroup>

    <ItemGroup>
        <packagereference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="3.2.1" />
        <packagereference Include="Microsoft.AspNetCore.Components.WebAssembly.Build" Version="3.2.1" PrivateAssets="all" />
        <packagereference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="3.2.1" PrivateAssets="all" />
        <packagereference Include="System.Net.Http.Json" Version="3.2.0" />
    </ItemGroup>

</Project>

我错过了什么/做错了什么?

解决方法

您应该注意文章中的信息:

幸运的是,有一种解决方法:您可以导入默认目标 文件,然后导入文本模板目标:

解决方案

您应该在netstandard 2.1节点之后导入这些目标。

在我的身边,我使用这些:

<Project Sdk="Microsoft.NET.Sdk.Web">
        
           <PropertyGroup>
               <TargetFramework>netstandard2.1</TargetFramework>
               <RazorLangVersion>3.0</RazorLangVersion>
           </PropertyGroup>
       
       
         <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk.Web" />
         <Import Project="$(VSToolsPath)\TextTemplating\Microsoft.TextTemplating.targets"/>
       
           <ItemGroup>
               <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="3.2.1"/>
               <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Build"
   Version="3.2.1" PrivateAssets="all" />
               <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer"
   Version="3.2.1" PrivateAssets="all" />
               <PackageReference Include="System.Net.Http.Json" Version="3.2.0"/>
           </ItemGroup>
       
 </Project>

然后

enter image description here