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

VS2022中加载System.Net.Http.WebRequestHandler 4.2.0.0及相关问题解决

解决Visual Studio 2022中C#程序集版本不匹配及系统文件保护警告问题

问题背景

使用Visual Studio 2022开发C#项目时,遭遇程序集名称/版本不匹配问题:安装最新版System.Net.Http NuGet包后,仍无法引用4.2.0.0版本的System.Net.Http.WebRequestHandler,仅能使用4.0.0.0版本。

构建安装程序时触发以下警告,提示多个系统保护目录下的程序集应排除,且存在System.Net.Http.dll的多版本打包冲突:

WARNING: 'System.IO.Compression.FileSystem.dll' should be excluded because its source file 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.IO.Compression.FileSystem\v4.0_4.0.0.0__b77a5c561934e089\System.IO.Compression.FileSystem.dll' is under Windows System File Protection.
WARNING: 'System.IO.Compression.dll' should be excluded because its source file 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.IO.Compression\v4.0_4.0.0.0__b77a5c561934e089\System.IO.Compression.dll' is under Windows System File Protection.
WARNING: 'System.Net.Http.WebRequest.dll' should be excluded because its source file 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Net.Http.WebRequest\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Net.Http.WebRequest.dll' is under Windows System File Protection.
WARNING: 'System.Diagnostics.Tracing.dll' should be excluded because its source file 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Diagnostics.Tracing\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Diagnostics.Tracing.dll' is under Windows System File Protection.
WARNING: 'System.Net.Http.dll' should be excluded because its source file 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Net.Http\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Net.Http.dll' is under Windows System File Protection.

程序集依赖分析确认存在同名不同版本的DLL冲突,以下是对应疑问的解决方案:


1. 让Visual Studio 2022正确安装并设置程序集版本

  • 清理重装NuGet包:
    1. 右键项目 → 管理NuGet程序包,卸载System.Net.Http及关联依赖包(如System.Net.Http.WebRequest)
    2. 删除项目根目录下的packages文件夹,清理残留缓存
    3. 重新安装对应版本的System.Net.Http NuGet包(注意:程序集版本4.2.0.0通常对应NuGet包版本4.3.0及以上)
  • 手动调整项目引用配置:
    编辑项目的.csproj文件,明确指定程序集版本和本地路径:
    <Reference Include="System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Net.Http.4.3.0\lib\net46\System.Net.Http.dll</HintPath>
      <Private>True</Private>
    </Reference>
    
  • 启用程序集绑定重定向:
    在app.config或web.config中添加重定向规则,将旧版本请求导向目标版本:
    <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
          <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
          <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
        </dependentAssembly>
      </assemblyBinding>
    </runtime>
    

2. 规避“受Windows系统文件保护”的警告

  • 排除GAC程序集打包:
    在安装项目(如Visual Studio安装项目、WiX)中,将警告列表中的系统程序集设置为不包含在安装包内——这些程序集由系统维护,运行时会自动从GAC加载,无需打包。
  • 关闭“复制本地”选项:
    右键项目中的系统程序集引用 → 属性,将复制本地设为False,避免编译时将GAC中的DLL复制到输出目录,从根源避免安装程序打包这些文件。
  • 强制使用NuGet本地副本:
    确保项目引用的是NuGet包目录下的DLL(而非GAC路径),此时安装程序会打包本地副本,不会触发系统文件保护警告。

3. 强制更改程序集的默认版本

  • 通过绑定重定向强制版本:
    利用上述绑定重定向规则,无论项目引用的原始版本是什么,运行时都会统一使用指定的4.2.0.0版本。
  • 手动修改引用版本:
    右键程序集引用 → 属性,在版本下拉框中选择目标版本;若列表无对应版本,直接编辑.csproj文件手动指定版本号和HintPath。
  • 用日志工具排查冲突:
    启动Visual Studio开发者命令提示符中的Fuslogvw.exe,启用程序集绑定日志,查看程序集加载的具体路径和版本,定位冲突来源后针对性调整引用规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 13:53:09