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

Visual Studio 2017优先使用旧NuGet包而非本地程序集引用的问题

让Visual Studio优先使用本地My.Common 2.0程序集的解决方案

我来给你几个靠谱的办法,帮你搞定这个问题——既能用上本地修复的My.Common 2.0,又不用替换其他类库的NuGet引用:

1. 先彻底清理缓存,避免旧程序集“赖着不走”

Visual Studio经常会缓存旧的程序集,导致你明明改了引用,它还是用旧的。先做一波彻底清理:

  • 关掉Visual Studio,手动删除项目根目录下的bin和obj文件夹
  • 删除VS的组件缓存:打开文件资源管理器,输入%LOCALAPPDATA%\Microsoft\VisualStudio\<你的VS版本号>\ComponentModelCache,删掉里面的所有文件
  • 重启VS,重新生成整个解决方案

2. 精准配置项目文件的本地引用

确保你的.csproj里的本地引用配置完全正确,并且优先级高于NuGet的传递引用:

  1. 先在NuGet包管理器里彻底卸载My.Common的NuGet引用
  2. 手动编辑.csproj文件,把本地引用改成这样(注意替换路径和公钥令牌):
<Reference Include="My.Common, Version=2.0.0.0, Culture=neutral, PublicKeyToken=你的公钥令牌">
  <HintPath>..\你的本地DLL路径\My.Common.dll</HintPath>
  <SpecificVersion>true</SpecificVersion>
  <Private>true</Private>
</Reference>

划重点:如果你的My.Common是强命名程序集,PublicKeyToken必须和1.0版本完全一致,否则VS会找不到这个程序集;如果没强命名,可以直接去掉这个属性。

3. 添加程序集绑定重定向,让CLR自动替换版本

因为My.Logging、My.Navigation这些类库引用的是1.0版本,你需要告诉CLR:“凡是找1.0的My.Common,都用2.0的代替”。在应用的app.config(或web.config)里加这段配置:

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="My.Common" publicKeyToken="你的公钥令牌" culture="neutral" />
        <!-- 把所有1.0版本的请求重定向到2.0 -->
        <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

这个配置是关键——它能解决其他类库依赖1.0但你想用2.0的矛盾,不用修改那些类库的引用。

4. 排查并阻断传递引用的旧版本

有时候即使你卸载了My.Common的NuGet,其他类库可能会通过传递依赖再次把1.0版本拉进来。可以这么排查和解决:

  • 打开NuGet包管理器控制台,运行Get-Package -ProjectName 你的应用项目名,看看输出里有没有My.Common 1.0
  • 如果有,在.csproj里添加这段配置,直接阻断这个传递引用:
<PackageReference Include="My.Common" Version="1.0.0.0">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>none</IncludeAssets>
</PackageReference>

5. 可选方案:用本地NuGet源替代直接引用DLL

如果不想每次手动复制DLL,更优雅的方式是把修复后的My.Common打包成本地NuGet包:

  • 打开命令行,进入My.Common项目目录,运行dotnet pack -c Release -o ./local-nuget,生成NuGet包
  • 在VS的NuGet包管理器设置里,添加刚才的local-nuget文件夹作为本地源
  • 给你的应用安装这个本地的2.0版本,这样既保留了NuGet的便利,又能确保用的是修复后的版本,其他类库依然可以用内网的1.0版本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:19:21