问题的简短版本:
如果我有两个或更多项目引用同一个程序集的不同版本的情况,是否有一种很好的方法可以在构建时检测到? (实际上,我想教我们的CI服务器这样做)
长版:
所以这是一个有趣的问题(简化了一点以便于消化):
最近遇到的情况是我们在一个解决方案A和B中有2个项目.A和B都依赖于第三方nuget包C。
A总是加载C,B在极少数情况下只需要C.
因此,在此sprint期间,开发人员更新了Project A以使用最新版本的C包(没有意识到B也依赖于C)
构建的所有内容和我们已经通过的测试(我们没有足够的测试覆盖率),但是当我们发布到生产时,我们在B尝试使用依赖项时出现了故障(加载器问题,因为我们想要一个不同版本的强烈命名的集会。)
我们发现了问题,并对其进行了纠正,但是。我真的很想能够在开发过程中发现这一点。如果我们的构建服务器在进行CI构建时能够检测到这一点(TFS 2012),那就更酷了。
我怎样才能发现这种情况?
答案 0 :(得分:1)
由于动态加载,VS无法为你做这件事(除非我遗漏了什么):它无法知道哪些程序集将在运行时加载。
我们遇到了同样的问题(使用Prism - 我们的所有程序集都在应用程序启动时正常加载,并且顺序在配置文件中描述,尽管大多数是可选的)。我首先想到制作一个基本扫描所有packages.config或csproj文件的小工具,以查看在哪个版本中使用了哪些程序集,并在找到两个不同版本的程序包时使其抱怨。但我最终在更高层次处理它,更直接和万无一失:我们现在有一个简单的类,实际应用程序的存根,只是加载配置文件中描述的所有应用程序的组件和模块。这导致所有可以加载的程序集被加载,因此如果出现问题,将会找到它。此功能只是放在单元测试中。