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

迁移至PackageReference后使用dotnet build构建项目失败

.NET Framework 4.7.2项目使用PackageReference时dotnet build找不到NuGet包的解决办法

问题背景

一个包含70个项目的大型解决方案已全部迁移为PackageReference模式,在Visual Studio内构建正常,但单独对无顶层项目引用的.NET Framework 4.7.2项目执行dotnet build时,会出现NuGet包找不到的编译错误,示例报错如下:

MSBuild version 17.4.1+9a89d02ff for .NET
  Determining projects to restore...
  Restored C:\Work\ProjectA\ProjectA.csproj (in 278 ms).
C:\Work\ProjectA\FolderA\Class1.cs(1,7): error CS0246: The type or namespace name 'Newtonsoft' could not be found

全局NuGet缓存目录%USERPROFILE%\.nuget\packages中存在对应版本的包,且已尝试以下无效方案:

  • 设置NUGET_PACKAGES环境变量为%USERPROFILE%\.nuget\packages
  • 在NuGet.config中添加<add key="repositoryPath" value="%USERPROFILE%\.nuget\packages" />
  • 清除本地NuGet缓存,删除obj、bin、.vs文件夹

但使用指定NuGetPackagesPath参数的MSBuild命令可成功构建:
msbuild ProjectA.csproj /t:Build /p:NuGetPackagesPath=%USERPROFILE%\.nuget\packages


可行解决办法

1. 修正NuGet.config的配置项

repositoryPath是旧版packages.config模式的配置项,PackageReference模式需使用globalPackagesFolder。修改全局或项目根目录的NuGet.config:

<configuration>
  <config>
    <add key="globalPackagesFolder" value="%USERPROFILE%\.nuget\packages" />
  </config>
</configuration>

全局NuGet.config路径通常为%APPDATA%\NuGet\NuGet.Config,项目根目录的配置优先级更高。

2. 为dotnet build显式传递参数

直接在dotnet build命令中指定NuGet包路径:

dotnet build ProjectA.csproj /p:NuGetPackagesPath=%USERPROFILE%\.nuget\packages

批量处理时可封装成批处理或PowerShell脚本。

3. 分步骤执行还原与构建

先指定路径完成依赖还原,再基于已还原的依赖构建:

dotnet restore ProjectA.csproj /p:NuGetPackagesPath=%USERPROFILE%\.nuget\packages
dotnet build ProjectA.csproj --no-restore

4. 检查dotnet SDK兼容性

确保使用的dotnet SDK版本支持.NET Framework 4.7.2的PackageReference构建,可执行dotnet --version查看版本,若版本较旧,升级至6.x或7.x等稳定版。

5. 确认项目目标框架配置

检查项目文件中是否正确指定目标框架,避免多框架或配置冲突:

<TargetFramework>net472</TargetFramework>

内容的提问来源于stack exchange,提问作者ZeroCool

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 14:21:30