You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

VS2022中使用“编辑并继续”时遇到程序集引用版本变更不允许的错误如何解决?

VS2022中使用“编辑并继续”时遇到程序集引用版本变更不允许的错误如何解决?

我之前在做类似的跨框架项目时也踩过一模一样的坑——.NET Framework 4.8的WinForms项目引用了带PropertyChanged.Fody的.NET Standard类库,每次想用“编辑并继续”修改项目B的代码,就弹出这个System.Runtime版本冲突的错误,折腾了好一阵才摸清楚解决方法,给你分享几个亲测有效的方案:

方法一:统一程序集绑定重定向(最推荐)

核心思路是让WinForms项目A强制使用一致的System.Runtime版本,避免调试过程中出现版本跳变:

  • 打开项目A的app.config文件
  • <configuration>节点内部添加<runtime>节点,写入System.Runtime的绑定重定向配置:
<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>
  • 保存配置后,清理并重新生成整个解决方案,再尝试“编辑并继续”,大部分场景下这个方法就能解决问题。

方法二:给项目B启用自动绑定重定向

有时候.NET Standard项目的绑定重定向配置没自动生成完整,我们可以手动强制开启:

  • 右键项目B,选择“编辑项目文件”(直接打开.csproj文件)
  • <PropertyGroup>节点中添加以下两行配置:
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
  • 保存项目文件后重新生成,项目B会自动生成适配的绑定重定向规则,减少跨框架版本冲突的概率。

方法三:调试时临时禁用Fody(针对性解决)

Fody这类代码织入工具,有时候会在调试编译阶段悄悄修改程序集版本,我们可以让它只在Release发布模式下工作:

  • 打开项目B的FodyWeavers.xml文件
  • 给PropertyChanged节点添加条件编译判断,仅在Release模式下启用:
<Weavers>
  <PropertyChanged Condition=" '$(Configuration)' == 'Release' " />
</Weavers>

这样调试阶段Fody不会介入程序集处理,“编辑并继续”就能正常运行,发布时依然能享受Fody的功能。

方法四:终极根治——将项目B迁移到.NET Framework 4.8

如果项目B没有必须使用.NET Standard的硬性要求,直接把它转为.NET Framework 4.8类库是一劳永逸的方案:

  • 右键项目B打开“属性”面板
  • 在“应用程序”标签页的“目标框架”下拉菜单中选择“.NET Framework 4.8”
  • 确认变更后,项目会自动对齐所有依赖程序集的版本,和WinForms项目A完全统一,版本冲突问题就彻底消失了。

最后再提个小技巧:如果以上方法都试过还是不行,试试手动删除解决方案下所有项目的binobj文件夹,重启VS后重新生成——有时候VS的缓存会搞出这种莫名其妙的小问题,清缓存往往能解决!

火山引擎 最新活动