【发布时间】:2014-12-12 08:43:13
【问题描述】:
我正在寻找一种方法来检测大型 Visual Studio 解决方案中的程序集引用问题:
- 对错误位置的二进制引用,例如不在源代码管理或其他项目输出中的路径
- 解决方案中跨项目对同一程序集的多个版本的二进制引用
- 没有路径的二进制引用,可能会被重定向到 GAC
- 应该是项目引用的二进制引用
整个故事
我从事一个大型 C# 项目,其中有将近 200 个项目。 随着时间的推移,问题之一是添加了对程序集的引用,但并不总是添加到相同的版本或正确的位置。
例如,项目可能会在没有提示路径的情况下获得对 System.Web.Mvc 的引用,从而使其引用 GAC 中的任何版本。 Visual Studio(和 Resharper)也将提供添加缺失的引用,但可以通过添加对另一个项目的输出文件夹的引用来实现。
现在最近的Windows Update catastrophy 让一些团队成员陷入困境,无法构建解决方案。可以想象,这提高了我们对程序集引用管理的优先级。
为了检测一些最明显的问题,我已经设置了一个 msbuild 文件,该文件可以包含在每个 csproj 文件中,并且可以检测错误的引用。
但是,需要手动编辑新项目文件以包含该脚本。所以这将不可避免地被遗忘。
我真正想要的是在持续构建期间检查解决方案中的所有项目文件是否存在“错误”引用,以便始终检查所有项目。
我一直在谷歌上搜索这样的解决方案,发现了很多静态分析和代码分析工具,但没有什么可以分析解决方案中的项目文件。
那么,在我离开roll my own 解决方案之前,有没有办法做到这一点?
更新
为了清理代码库,我创建了一些 ScriptCS 代码,这些代码将扫描所有 csproj 文件以查找 Nuget 包中程序集的引用并修复它们。起来了on GitHub。
【问题讨论】:
-
要求我们推荐或查找书籍、工具、软件库、教程或其他场外资源的问题对于 Stack Overflow 来说是无关紧要的,因为它们往往会吸引固执己见的答案和垃圾邮件。相反,请描述问题以及迄今为止为解决该问题所做的工作。
-
@EZI 我要求为具体的软件开发问题提供具体的解决方案,我想说这符合 StackOverflow 的主题
-
我们遇到了一个相关的问题。随着时间的推移,我们的解决方案最终会得到同一个 NuGet 包的两个或三个版本,因为人们只会安装最新的包,而不是使用现有版本。 Anywho...我最终编写了自己的工具来分析包并识别任何重复项。我怀疑你将不得不做同样的事情。
标签: c# msbuild code-analysis static-analysis