构建解决方案时随机出现多种NuGet相关错误求助
随机NuGet安装失败问题的排查思路
构建解决方案时随机出现以下某类错误:
C:\working_directory.nuget\NuGet.targets(91, 5): Type handle 'NuGet.ProjectModel.LockFile' and method handle with declaring type 'NuGet.ProjectModel.HashCodeCombiner' are incompatible. Get RuntimeMethodHandle and declaring RuntimeTypeHandle off the same MethodBase. C:\working_directory.nuget\NuGet.targets(91, 5): error MSB3073: The command ""C:\working_directory.nuget\NuGet.exe" install "C:\working_directory\Project_A\packages.config" -source " https://www.nuget.org/api/v2/ " -NonInteractive -RequireConsent -solutionDir "C:\working_directory\ "" exited with code 1. C:\working_directory.nuget\NuGet.targets(91, 5): Common Language Runtime detected an invalid program. An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)该问题最初仅出现在一台机器上,现在另一台机器也出现相同情况;并非持续出现,多次重建后可成功,但
Clean Solution无法解决。环境为VS2015和VS2013。
根据你遇到的这些随机错误(涉及CLR运行时、NuGet版本兼容性、MSB3073退出码等),以下是针对性的排查方向:
1. 修复NuGet.exe版本与VS的兼容性
你日志里提到的NuGet版本是3.5.0.1938,这个版本和VS2013/2015的适配存在不稳定点:
- 替换为对应VS版本的稳定NuGet版本:VS2013推荐使用NuGet 2.8.6.x版本,VS2015推荐NuGet 3.4.4这类经过验证的稳定版,避免过新或过旧的版本引发冲突。
- 手动替换NuGet.exe:下载官方稳定版后,替换掉
C:\working_directory\.nuget\NuGet.exe,同时删除该文件夹下的NuGet.targets和NuGet.config,重启VS后会自动生成适配当前VS的默认配置。
2. 排查32位/64位平台不匹配问题
错误中的BadImageFormatException和“格式不正确的程序”提示,大概率是位数冲突导致:
- 强制以32位模式启动VS:找到VS的x86启动路径(比如VS2015是
C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe),用这个路径启动VS,避免64位VS进程调用32位NuGet.exe(反之亦然)的冲突。 - 确认NuGet.exe位数:下载32位版本的NuGet.exe,旧版VS对32位工具的兼容性更好。
3. 彻底清理NuGet缓存与本地包
缓存损坏是随机错误的常见诱因,不要只依赖Clean Solution:
- 删除全局NuGet缓存:手动删除
%userprofile%\.nuget\packages文件夹,强制NuGet重新下载完整的包文件。 - 清理解决方案本地文件:删除解决方案根目录下的
packages文件夹,以及所有项目的bin、obj文件夹,重启VS后右键解决方案选择Enable NuGet Package Restore,重新触发包安装流程。
4. 修正NuGet配置与项目文件的细节问题
日志里的源地址有前置空格(" https://www.nuget.org/api/v2/ "),这可能导致偶尔的解析失败:
- 编辑
.nuget\NuGet.config,把源地址的多余空格去掉,改成"https://www.nuget.org/api/v2/"。 - 检查所有项目的
packages.config,确认没有引用不存在的包或版本冲突的依赖,保证跨项目的包配置一致。 - 确认所有项目的包还原开关已开启:右键项目→属性→生成→勾选“允许NuGet包还原”。
5. 修复.NET Framework运行时
错误中的“CLR检测到无效程序”、“签名不正确”提示,可能是.NET运行时损坏:
- 修复对应版本的.NET Framework:VS2013依赖.NET 4.5.1,VS2015依赖.NET 4.6,打开控制面板→程序和功能→找到对应的.NET Framework,选择“更改→修复”。
- 临时关闭杀毒软件或调试工具:部分安全软件可能拦截NuGet.exe的运行或修改其文件签名,尝试关闭后再构建测试。
6. 检查文件系统权限与磁盘健康
随机错误也可能和磁盘文件损坏、权限不足有关:
- 确保
C:\working_directory文件夹有完整的读写权限:右键文件夹→属性→安全→给当前用户添加“完全控制”权限。 - 运行磁盘检查:以管理员身份打开命令提示符,执行
chkdsk C: /f,修复可能存在的磁盘错误(需要重启电脑生效)。
内容的提问来源于stack exchange,提问作者Dhinnesh Jeevan
相关产品推荐
相关产品推荐

