对 system.web.mvc v3 的奇怪依赖,当所有内容都明确引用 v5.2.3 时

Weird dependency on system.web.mvc v3, when everything has an explicit reference to v5.2.3

提问人:Eric Brown - Cal 提问时间:6/3/2023 最后编辑:marc_sEric Brown - Cal 更新时间:6/9/2023 访问量:42

问:

我正在尝试追踪 VS 2013 中的构建问题和 ASP.NET MVC 项目。

生成失败,但唯一有意义的完整消息是程序集冲突警告。

我修复了它,因为特定错误告诉我诊断模式下的哪个程序集消失了

当我进行完全重建时,除了我的主项目失败外,一切都构建了tacadmin

10>------ 重建 全部启动:项目:TACAdmin,配置:调试 任何 CPU ------ 10>Build 开始于 2023 年 6 月 2 日下午 12:03:54。 10>核心清洁:

10>C:\Program 文件 (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets(1697,5):警告 MSB3277:发现无法解决的同一依赖程序集的不同版本之间的冲突。这些参考 当日志详细程度设置为 详细。10>D:\TFS\TACAdmin_3_19\TACAdmin\RDLC\ExampleOfRDLC.rdlc: 警告 rsOverlappingReportItems:行“line1”和文本框 “textbox6”重叠。并非所有报表项都支持重叠报表项 渲染器。10>D:\TFS\TACAdmin_3_19\TACAdmin\RDLC\ExampleOfRDLC.rdlc: 警告 rsOverlappingReportItems:行“line1”和文本框 “textbox5”重叠。并非所有报表项都支持重叠报表项 渲染器。10>D:\TFS\TACAdmin_3_19\TACAdmin\RDLC\OMS20RptTotals.rdlc: 警告 rsOverlappingReportItems:文本框“textbox1”和文本 框“TextBox16”重叠。不支持重叠的报表项 所有渲染器。10> 10>构建失败。10> 10>时间已用 00:00:05.16 ========== 全部重建:9 次成功,1 次失败,0 次跳过 ==========

这很奇怪,因为唯一有意义的消息是关于同一程序集冲突的警告。我将 msbuild 输出设置为诊断,并收到有关 system.web.mvc 3 和 5.2.3 之间冲突的消息。

所以我在配置中添加了映射来解决这个问题。

 <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" culture="neutral" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
      </dependentAssembly>

仍然出现错误。我在所有项目中安装了 5.2.3.0 的 nuget 包,并引用了 .System.Web.MvcSystem.Web.Mvc

仍然出现错误。因此,将其安装在解决方案中的每个项目中。

关于 3 和 5 的特定消息消失了,但我仍然收到失败的构建错误和上面的程序集不匹配警告。System.Web.Mvc

诊断模式下的日志非常长,但是当我搜索冲突、错误和异常时,我什么也没找到。

我在解决方案文件夹中搜索并跟踪引用缓存文件中的引用。System.Web.Mvc

enter image description here

我在 VS2013 中运行依赖项检查器,它只显示对 5.2.3.0 的引用。System.Web.Mvc

缓存文件仍显示 mvc 3。

我在 VS 2013 的架构下使用了依赖关系图,它只显示了对 5.2.3.0 的依赖关系。System.Web.Mvc

enter image description here

(由于工作设置,无法获得信息弹出窗口的屏幕截图,但它是 5.2.3.0System.Web.Mvc

我不知所措。

我如何:

  1. 弄清楚该警告是否真的是生成失败的原因。
  2. 确定存在什么程序集冲突,如果不是,我假设仍然是 3。System.Web.Mvc
  3. 将依赖项树跟踪到最末端,看看这些项目中引用的任何 dll 本身是否依赖于 3,这就是问题所在。(依赖关系的依赖关系)System.Web.Mvc
C# asp.net ASP.NET-MVC 依赖项 程序集

评论

1赞 Richard Housham 6/8/2023
只是检查一下,您是否删除了 bin 和 obj 文件夹并进行了真正的“重建”
1赞 Richard Housham 6/8/2023
你看过这个吗?stackoverflow.com/questions/24772053/......
1赞 Richard Housham 6/8/2023
我想另一种选择是备份代码,删除项目 - 使用所有代码重新创建并修复任何依赖项。有点长,但你去吧......
0赞 Eric Brown - Cal 6/9/2023
理查德·豪沙姆(Richard Housham):如果我不能弄清楚的话,这是我的备用计划。我没有手动删除垃圾箱文件夹,但我确实进行了清理,然后手动重建了所有文件夹。感谢您的 SO 帖子参考

答:

1赞 Eric Brown - Cal 6/9/2023 #1

我把这个答案放在这里,希望它能帮助下一个遇到这个问题的人,即使我的解决方案也有点模棱两可。我在 csproj 或 packages.config 中没有找到一行让我兴奋不已的时刻。我强行解决了这个问题。

我多次遇到这个错误,对于几个组件......但是 System.Web.Mvc 是唯一一个在我手动修补所有内容后仍然说它很糟糕的。我从来没有弄清楚为什么关于模棱两可的引用的警告会导致构建失败,但这是 100% 发生的事情。当所有程序集冲突警告都得到修复后,它就编译了。

我进入了 tool->options-> 构建和运行,并将输出和日志记录设置为诊断。这有助于后来的再次发生。

我使用了 Ndepends,它不会扫描 vs2013 的项目(2015 年是最早支持的),所以我认为对我没有帮助。后来我意识到我能够让它扫描文件夹,只需指向 bin/Debug 文件夹即可获得依赖关系树。它显示了同样的事情,所有包都正确地依赖于 System.Web.MVC 的 v5。不是 v3。

我最终通过在解决方案中的每个包上手动运行 uninstall-package System.web.mvc -force 一次一个来解决这个问题。验证它们是否都消失了,然后重新安装其 nuspec 文件中依赖于 System.web.MVC 的包(我们的库包)。这修复了它,即使它应该与手动安装它没有太大区别。

其他出现的相同错误,一个我如上所述修复,另一个我通过卸载包来修复,然后只是构建并让包刷新将新版本拉下来......这让我感到惊讶,因为理论上我已经从所有packages.config中删除了包引用,但它有效。

最后一次我如上所述单独更新配置并修复了该问题。在最后一个问题中,问题是我依赖但无法更改的软件包引用了旧版本。不知道为什么这个有效,而其他人没有。

正如 Richard 上面的评论所说,我最后的答案是制定一个新的解决方案,然后手动一次移动一个包,然后再次重新修复所有引用。我曾经遇到过这个令人困惑的引用错误,这些错误在过去很多次都没有意义。

有点乱,但问题本身也是如此。我希望这个答案对下一个遇到错误的人有所帮助。

评论

1赞 Richard Housham 6/10/2023
听起来有点像一场战斗!
0赞 Eric Brown - Cal 6/21/2023
事实证明,我仍然有问题,我最终为有问题的项目创建了一个新项目,并复制了所有代码并手动重新安装了所有软件包。这最终解决了问题。