我试图跟踪VS 2013和ASP.NET MVC项目中的一个构建问题。
生成失败,但唯一有意义的完整消息是程序集冲突警告。
我修复了它足够的具体错误告诉我哪个程序集在诊断模式消失了
当我进行完整重建时,除了主项目tacadmin
失败外,所有内容都会生成
10>-----重新构建已启动:项目:TACAdmin,配置:Debug Any CPU ------ 10>Build started 6/2/2023 12:03:54 PM. 10>CoreClean:
10>C:\Program Files(x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets(1697,5):**警告MSB 3277:发现同一依赖程序集的不同版本之间存在无法解决的冲突。当日志详细设置为detailed时,这些引用冲突将在构建日志中列出。**10>D:\TFS\TACAdmin_3_19\TACAdmin\RDLC\ExampleOfRDLC.rdlc:rsOverlappingReportItems警告:行“line 1”和文本框“textbox 6”重叠。并非所有渲染器都支持重叠报表项。10>D:\TFS\TACAdmin_3_19\TACAdmin\RDLC\ExampleOfRDLC.rdlc:rsOverlappingReportItems警告:行“line 1”和文本框“textbox 5”重叠。并非所有渲染器都支持重叠报表项。10>D:\TFS\TACAdmin_3_19\TACAdmin\RDLC\OMS20RptTotals.rdlc:rsOverlappingReportItems警告:文本框“textbox 1”和文本框“textbox 16”重叠。并非所有渲染器都支持重叠报表项。10> 10>构建失败。10> 10>时间流逝00:00:05.16 =全部重建:9成功,1失败,0跳过==============
这很奇怪,因为唯一有意义的消息是关于同一程序集冲突的警告。我将msbuild输出切换为diagnostic,并显示了一条关于system.web.mvc3和5.2.3之间冲突的消息
所以我在配置中添加了Map来解决这个问题。
<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>
仍然有错误。我在所有引用System.Web.Mvc
的项目中安装了System.Web.Mvc
www.example.com的nuget包5.2.3.0。
仍然有错误。因此,在解决方案中的每个项目中都安装了它。
关于System.Web.Mvc
3和5的特定消息消失了,但我仍然收到了上面的失败构建错误和汇编不匹配警告。
日志在诊断模式下非常长,但是当我搜索冲突、错误和异常时,我什么也没有找到。
我在解决方案文件夹中搜索System.Web.Mvc
,并在引用缓存文件中查找引用。
我在VS 2013中运行依赖检查器,它只显示对System.Web.Mvc
5.2.3.0的引用。
该高速缓存文件仍然显示mvc 3。
我在VS 2013中使用了架构下的依赖关系图,它只显示了对System.Web.Mvc
5.2.3.0的依赖关系。
(can由于工作设置的原因,无法获得弹出信息的截图,但它是System.Web.Mvc
5.2.3.0
我不知道该怎么办
如何:
1.弄清楚这个警告是否真的是构建失败的原因。
1.弄清楚他们的程序集冲突是什么,如果它不像我假设的那样仍然是System.Web.Mvc
3。
1.跟踪依赖关系树的最后一段,看看这些项目中我引用的dll是否都依赖于System.Web.Mvc
3,这就是问题所在。(dependency of a dependency)
1条答案
按热度按时间5m1hhzi41#
我把这个答案放在这里,希望它帮助下一个有这个问题的人,甚至我的解决方案是有点模棱两可。我没有在csproj或packages.config中找到任何一行让我恍然大悟。我强行解决了这个问题。
我有这个错误几次,为几个组件...但是System.Web.MVC是唯一一个在我手动修补所有东西后,它仍然说它是坏的。我从来没有弄清楚为什么关于模糊引用的警告会导致构建失败,但这是100%发生的事情。当所有的程序集冲突警告被修复后,它就会被编译。
我进入了工具->选项->构建和运行,并将输出和日志记录设置为诊断。这有助于后来的重演。
我使用了Ndepends,它不会扫描vs 2013的项目(2015是支持的最早版本),所以我想不会对我有帮助。后来我意识到我可以让它扫描一个文件夹,只是指向bin/Debug文件夹就可以得到依赖关系树。它显示了同样的事情,所有的包都正确地依赖于System. Web. MVC的v5。不是V3。
我最终修复了这个问题,方法是对解决方案中的每个包手动运行uninstall-packageSystem.web. mvc-force,一次一个。验证它们是否都消失了,然后重新安装在nuspec文件中依赖System.web.MVC的包(Our libraries包)。这修复了它,即使它应该已经没有太大的区别安装它手动。
其他发生的相同错误,一个我修复了上面,另一个我修复了卸载包,然后只是构建和让包刷新拉下新版本...这让我很惊讶,因为理论上我已经从所有packages.config中删除了package引用,但它确实有效。
最后一次我更新了配置单独如上所述,并修复了这个问题。在最后一个问题是,我依赖的一个包,但无法更改是引用了一个旧版本。我不知道为什么这一个工作时,其他人没有。
正如Richard上面的评论所说,我的最后一招是制定一个新的解决方案,用手一次移动一个包,然后重新修复所有的引用。我有这个修复令人困惑的参考错误,没有任何意义,在过去的很多次。
有点乱,但问题本身也是。我希望这个答案能帮助下一个遇到错误的人。