我正在寻找一种在大型Visual Studio解决方案中检测程序集引用问题的方法:
整个故事
我在一个大型C#项目上工作,几乎有200个项目。 长期存在的问题之一是添加了对程序集的引用,但并不总是添加到相同的版本或正确的位置。
例如,项目可能会在没有提示路径的情况下获得对System.Web.Mvc的引用,从而使其引用GAC中的版本。 Visual Studio(和Resharper)还将提供添加缺少的引用,但可以通过添加对另一个项目的输出文件夹的引用来实现。
现在最近Windows Update catastrophy让一些团队成员死于水中,无法构建解决方案。您可以想象,这为我们提升了装配参考管理的优先级。
要检测一些最明显的问题,我已经设置了一个msbuild文件,可以包含在每个csproj文件中,并检测错误的引用。
但是,需要手动编辑新项目文件以包含该脚本。所以这将不可避免地被遗忘。
我真正想要的是在连续构建期间检查解决方案中所有项目文件的“错误”引用,以便始终检查所有项目。
我一直在谷歌搜索这样的解决方案已经有一段时间了,发现了许多静态分析和代码分析工具,但没有分析解决方案中的项目文件。
所以,在我离开roll my own解决方案之前,有没有办法做到这一点?
更新
为了清理代码库,我创建了一些ScriptCS代码,它将扫描所有csproj文件以引用Nuget包中的程序集并修复它们。它已经on GitHub了。
答案 0 :(得分:3)
您可以创建一个NuGet包,其唯一目的是将自定义 .targets 文件合并到项目中。我最近使用此策略来解决另一个问题(缺少 .snk 文件的错误消息)。
如果您创建了类似的软件包,则可以轻松地右键单击解决方案节点并验证它是否已安装在所有C#项目中。
如果您的分析更复杂并且需要使用除 .targets 文件之外的程序集(自定义构建任务),您可以使用我用于{{3}的方法} NuGet包,其中包含构建任务,资源和自定义 .props 和 .targets 文件,但没有安装项目所引用的实际程序集。< / p>
答案 1 :(得分:2)
不是将它添加到解决方案中的所有项目中,为什么不创建某种测试(单元测试,构建文件,等等),可以将项目文件作为输入,解析它,如果OE或更多,则抛出错误引用不正确。比向项目文件添加(和签出,提交等)自定义构建步骤容易得多。
即使您使用之前提出的nuget包,您仍然需要手动检查是否所有项目(200个项目?真的吗?)参考包。