.NET 9项目构建遇NETSDK1064错误,多种尝试无效求解决方案
问题描述
构建.NET 9项目时持续触发以下错误,且多个项目受影响,Microsoft.Extensions.Logging.Abstractions包也出现相同问题:
Microsoft.PackageDependencyResolution.targets(266,5): error NETSDK1064: 未找到版本为9.0.6的Microsoft.EntityFrameworkCore.Analyzers包。该包可能在NuGet还原后被移除,或因路径长度限制导致还原未完全成功。
已尝试的操作:
- 执行
dotnet nuget locals all --clear - 执行
dotnet restore - 通过
dotnet add package Microsoft.EntityFrameworkCore.Analyzers --version 9.0.6手动添加包 - 验证包在NuGet上存在
- 缩短项目路径(排查MAX_PATH问题)
深度调试步骤
启用NuGet还原详细日志
执行dotnet restore -v diag,查看日志中包下载、解压的具体路径和错误信息,确认是否真的是路径问题,或是存在权限、网络拦截导致包未正确写入本地缓存。检查本地NuGet缓存路径
打开%appdata%\NuGet\NuGet.Config配置文件,查看packageSources和globalPackagesFolder配置,确认缓存路径是否有特殊字符或仍存在长度问题。可手动指定更短的全局缓存路径:<config> <add key="globalPackagesFolder" value="C:\NuGetCache" /> </config>修改后重新执行
dotnet restore。确认长路径支持是否完全开启
- Visual Studio端:进入「工具」→「选项」→「项目和解决方案」→「常规」,勾选「启用长路径支持」。
- 系统端:以管理员身份打开注册表,定位到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem,将LongPathsEnabled的值设为1。
永久修复方案
统一全局NuGet缓存路径
按上述调试步骤将全局NuGet缓存设置到根目录下的短路径文件夹,从根源避免缓存路径过长导致的包识别问题。用Directory.Build.props统一包版本
在解决方案根目录创建Directory.Build.props文件,统一管理所有项目的包版本,避免单个项目版本不一致引发的还原异常:<Project> <PropertyGroup> <EfCoreVersion>9.0.6</EfCoreVersion> <LoggingAbstractionsVersion>9.0.6</LoggingAbstractionsVersion> </PropertyGroup> <ItemGroup> <PackageReference Update="Microsoft.EntityFrameworkCore.Analyzers" Version="$(EfCoreVersion)" /> <PackageReference Update="Microsoft.Extensions.Logging.Abstractions" Version="$(LoggingAbstractionsVersion)" /> </ItemGroup> </Project>清理MSBuild相关缓存
执行以下命令清理MSBuild本地缓存,消除残留的异常缓存文件:dotnet clean -v diag rmdir /s /q "%USERPROFILE%\.nuget\packages\.tools" rmdir /s /q "%USERPROFILE%\AppData\Local\Microsoft\MSBuild"清理完成后重新构建项目。
更新Visual Studio与.NET SDK
.NET 9属于较新版本,确保已安装最新的.NET 9 SDK和Visual Studio对应更新补丁,规避IDE兼容性导致的构建问题。
内容的提问来源于stack exchange,提问作者urtopcuoglu

