无法找到GenerateFileFromTemplate任务及NuGet包还原失败
我维护一个包含多个.NET项目模板的Git仓库,因Visual Studio添加文件时性能极差,排查后发现是模板项目使用.csproj扩展名导致,遂将所有模板的.csproj改为.csproj.in。
为实现构建时将.csproj.in转换为.csproj,我参考了ASP.NET Core项目模板、spa-templates(基于Arcade SDK)、dotnet-template-samples、microsoft/SEAL等示例项目(这些示例均无nuget.config文件),在根csproj文件中添加了<GeneratedContentProperties>和<GeneratedContent>节点:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <GeneratedContentProperties> DefaultNetCoreTargetFramework=$(DefaultNetCoreTargetFramework); </GeneratedContentProperties> </PropertyGroup> <ItemGroup> <GeneratedContent Include="Angular-CSharp.csproj.in" OutputPath="content/Angular-CSharp/Company.WebApplication1.csproj" /> <GeneratedContent Include="React-CSharp.csproj.in" OutputPath="content/React-CSharp/Company.WebApplication1.csproj" /> </ItemGroup> </Project>
.csproj.in文件中引用了这些属性:
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>${DefaultNetCoreTargetFramework}</TargetFramework> ... </PropertyGroup> ... </Project>
应用配置后,构建时报错找不到GenerateFileFromTemplate任务,且dotnet restore无法还原Microsoft.DotNet.Build.Tasks.Templating包(NuGet源与spa-templates一致),后续发现该任务属于Arcade SDK。
请问如何解决此问题?还缺少哪些配置?
1. 引入Arcade SDK
GenerateFileFromTemplate任务是Arcade SDK的一部分,需在根项目中引入Arcade SDK。有两种方式:
- 直接替换项目SDK:将根csproj的开头替换为Arcade SDK:
<Project Sdk="Microsoft.DotNet.Arcade.Sdk"> <!-- 原有PropertyGroup、ItemGroup等配置 --> </Project> - 通过Import引入(保留原有SDK):如果需要继续使用
Microsoft.NET.Sdk,可通过Import节点引入Arcade的props和targets文件:<Project Sdk="Microsoft.NET.Sdk"> <Import Project="Sdk.props" Sdk="Microsoft.DotNet.Arcade.Sdk" /> <!-- 原有PropertyGroup、ItemGroup配置 --> <Import Project="Sdk.targets" Sdk="Microsoft.DotNet.Arcade.Sdk" /> </Project>
2. 指定Arcade SDK版本
需在项目根目录的global.json中明确指定Arcade SDK的版本,确保与参考项目(如spa-templates)使用的版本匹配:
{ "msbuild-sdks": { "Microsoft.DotNet.Arcade.Sdk": "8.0.0-beta.23474.1" // 替换为稳定或匹配的版本 } }
3. 配置NuGet源(若需)
虽然spa-templates未提供nuget.config,但可能依赖全局配置的包源。若你的环境中缺少Arcade包的源,需添加nuget.config文件,包含dotnet-public源:
<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <clear /> <add key="dotnet-public" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public/nuget/v3/index.json" /> <add key="nuget.org" value="https://api.nuget.org/v3/index.json" /> </packageSources> </configuration>
该源包含Arcade相关的包,可解决Microsoft.DotNet.Build.Tasks.Templating还原失败的问题。
4. 验证任务与变量配置
执行dotnet build -v detailed查看构建日志,确认:
GeneratedContentProperties中的变量是否被正确传递GenerateFileFromTemplate任务是否被加载GeneratedContent项的输入、输出路径是否正确
内容的提问来源于stack exchange,提问作者Pieterjan

