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

Visual Studio 2022中项目引用自动转为NuGet引用问题求助

NuGet引用强制覆盖手动项目/DLL引用的解决办法

问题现象

  • 在Visual Studio 2022 v17.5.4中,手动通过相对路径添加项目引用或直接引用DLL时,引用会自动切换到C:\Users\jeremy.nuget\packages\目录下的NuGet包DLL
  • 重现步骤:
    1. 删除Base项目的NuGet引用
    2. 添加对另一解决方案中Base项目Debug目录下DLL的引用
    3. 查看引用属性,路径仍指向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自动替换。

2. 禁用NuGet自动恢复功能

  • 依次点击工具 > 选项 > NuGet包管理器 > 常规,取消勾选:
    • "允许NuGet下载缺失的包"
    • "自动检查缺失的包"
  • 右键解决方案,选择管理解决方案的NuGet程序包,确认已完全卸载所有Base相关的NuGet包。

3. 彻底清理缓存与中间文件

  • 手动删除NuGet缓存中Base包的目录:C:\Users\jeremy.nuget\packages\base
  • 右键项目选择清理,再手动删除项目根目录下的bin和obj文件夹
  • 重启Visual Studio并重新加载解决方案。

4. 排查间接依赖

  • 检查解决方案中是否有其他项目仍引用Base的NuGet包,这种间接依赖可能会覆盖手动引用
  • 打开开发者命令提示符,执行以下命令检查全局包:
    dotnet nuget locals all --list
    
    若发现Base包存在,执行清理命令:
    dotnet nuget locals all --clear
    

5. 调试符号配置

若需要调试Base项目,不要复制DLL到NuGet目录,而是:

  • 将Base项目添加到当前解决方案,使用项目引用(最可靠的调试方式)
  • 若无法添加项目,将Base的pdb文件与DLL放在同一目录,然后在Visual Studio中点击调试 > 选项 > 符号,添加pdb所在目录到符号搜索路径,按需勾选"启用源服务器支持"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 15:22:23