Visual Studio 2022中项目引用自动转为NuGet引用问题求助
NuGet引用强制覆盖手动项目/DLL引用的解决办法
问题现象
- 在Visual Studio 2022 v17.5.4中,手动通过相对路径添加项目引用或直接引用DLL时,引用会自动切换到
C:\Users\jeremy.nuget\packages\目录下的NuGet包DLL - 重现步骤:
- 删除Base项目的NuGet引用
- 添加对另一解决方案中Base项目Debug目录下DLL的引用
- 查看引用属性,路径仍指向NuGet目录而非手动指定的Debug目录
- 关闭NuGet源、清理NuGet缓存后问题依旧;重命名NuGet目录下的DLL后,添加手动引用直接失败
- 解决方案中多个项目均受此影响,无法切换为非NuGet引用;复制Debug目录DLL到NuGet目录后,仍无法获取pdb符号进行调试
解决步骤
1. 直接编辑csproj文件锁定引用路径
手动修改项目的.csproj文件,替换NuGet自动生成的引用节点为手动指定的引用:
- 找到类似以下的NuGet引用节点并删除:
<PackageReference Include="Base" Version="x.x.x" /> - 添加手动引用(二选一):
- 项目引用(优先推荐,需将Base项目纳入当前解决方案):
<ProjectReference Include="..\..\AnotherSolution\Base\Base.csproj"> <Project>{Base项目的GUID}</Project> <Name>Base</Name> </ProjectReference> - 直接DLL引用:
<Reference Include="Base"> <HintPath>..\Path\To\Base\Debug\Base.dll</HintPath> <Private>True</Private> <SpecificVersion>True</SpecificVersion> </Reference>
<SpecificVersion>True</SpecificVersion>用于强制锁定指定版本,避免NuGet自动替换。 - 项目引用(优先推荐,需将Base项目纳入当前解决方案):
2. 禁用NuGet自动恢复功能
- 依次点击工具 > 选项 > NuGet包管理器 > 常规,取消勾选:
- "允许NuGet下载缺失的包"
- "自动检查缺失的包"
- 右键解决方案,选择管理解决方案的NuGet程序包,确认已完全卸载所有Base相关的NuGet包。
3. 彻底清理缓存与中间文件
- 手动删除NuGet缓存中Base包的目录:
C:\Users\jeremy.nuget\packages\base - 右键项目选择清理,再手动删除项目根目录下的
bin和obj文件夹 - 重启Visual Studio并重新加载解决方案。
4. 排查间接依赖
- 检查解决方案中是否有其他项目仍引用Base的NuGet包,这种间接依赖可能会覆盖手动引用
- 打开开发者命令提示符,执行以下命令检查全局包:
若发现Base包存在,执行清理命令:dotnet nuget locals all --listdotnet nuget locals all --clear
5. 调试符号配置
若需要调试Base项目,不要复制DLL到NuGet目录,而是:
- 将Base项目添加到当前解决方案,使用项目引用(最可靠的调试方式)
- 若无法添加项目,将Base的pdb文件与DLL放在同一目录,然后在Visual Studio中点击调试 > 选项 > 符号,添加pdb所在目录到符号搜索路径,按需勾选"启用源服务器支持"
内容的提问来源于stack exchange,提问作者Jeremy Thompson
相关产品推荐
相关产品推荐

