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

C#解决方案中System.Drawing版本冲突及自引用问题求助

问题

我有一个包含约20个项目的C#解决方案,其中一个项目构建时出现MSB3277警告:无法解析不同版本System.Drawing之间的冲突,涉及版本4.0.0.0与6.0.2.0。系统选择了4.0.0.0版本,因其为主要版本。依赖6.0.2.0版本的是解决方案内的其他项目,但依赖4.0.0.0版本的似乎是该项目自身,找不到阻止这种自引用的方法,求解决建议。

构建警告详情

9>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets(2364,5): warning MSB3277: Found conflicts between different versions of "System.Drawing" that could not be resolved.
9>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets(2364,5): warning MSB3277: There was a conflict between "System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" and "System.Drawing, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
9>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets(2364,5): warning MSB3277:     "System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" was chosen because it was primary and "System.Drawing, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" was not.
9>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets(2364,5): warning MSB3277:     References which depend on "System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" [C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Drawing.dll].
9>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets(2364,5): warning MSB3277:         C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Drawing.dll
9>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets(2364,5): warning MSB3277:           Project file item includes which caused reference "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Drawing.dll".
9>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets(2364,5): warning MSB3277:             System.Drawing
9>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets(2364,5): warning MSB3277:     References which depend on "System.Drawing, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" [].
解决建议

1. 核对项目目标框架

从警告路径能看出,出问题的项目用的是.NET Framework 4.8,而依赖6.0.2.0的项目应该是基于.NET 6+的。先明确这个项目能不能升级框架:

  • 能升级的话,直接把目标框架改成.NET 6或更高,.NET 6+里System.Drawing已经移到NuGet包System.Drawing.Common,升级后自动对齐版本,冲突直接解决。
  • 不能升级的话,接着往下操作。

2. 添加程序集绑定重定向

在出问题项目的App.config或Web.config里加一段配置,强制所有System.Drawing引用指向同一个版本:

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Drawing" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <!-- 把所有旧版本重定向到你要保留的版本,这里用4.0.0.0为例 -->
        <bindingRedirect oldVersion="0.0.0.0-6.0.2.0" newVersion="4.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

要是想统一用6.0.2.0,先确认.NET Framework 4.8兼容这个版本,再把newVersion改成6.0.2.0。

3. 清理项目引用

  • 打开出问题项目的引用列表,找到System.Drawing,右键查看属性,确认版本是4.0.0.0,删掉重复的引用。
  • 右键项目→选择“项目依赖项”→切换到“依赖项”标签,查看所有间接引用,排查是否有其他项目传递过来的6.0.2.0版本System.Drawing。

4. 统一NuGet包版本

如果项目使用了System.Drawing.Common NuGet包,确保所有项目的版本一致:

  • 打开解决方案的NuGet包管理器,把所有项目的System.Drawing.Common版本统一成同一个(比如4.0.0.0对应NuGet包版本4.7.0,6.0.2.0对应6.0.2)。
  • 要是出问题的项目没装这个包但间接引用了,直接安装对应版本的包,覆盖默认的框架引用。

5. 手动修改项目文件

前面的方法都无效的话,直接编辑项目的.csproj文件:

  • 找到<Reference Include="System.Drawing" />这一行,改成明确指定版本和路径的写法:
<Reference Include="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  <HintPath>C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Drawing.dll</HintPath>
</Reference>
  • 同时删掉任何可能存在的旧版本System.Drawing.Common引用。

内容的提问来源于stack exchange,提问作者KirkD-CO

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 14:05:55