问题描述
我有一个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>
然后,