You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法找到GenerateFileFromTemplate任务及NuGet包还原失败

问题:构建.NET项目模板时找不到GenerateFileFromTemplate任务,无法还原Microsoft.DotNet.Build.Tasks.Templating包

我维护一个包含多个.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 06:54:23