检查解决方案中的二进制引用

时间:2014-10-16 20:47:04

标签: c# msbuild code-analysis static-analysis

我正在寻找一种在大型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了。

2 个答案:

答案 0 :(得分:3)

您可以创建一个NuGet包,其唯一目的是将自定义 .targets 文件合并到项目中。我最近使用此策略来解决另一个问题(缺少 .snk 文件的错误消息)。

如果您创建了类似的软件包,则可以轻松地右键单击解决方案节点并验证它是否已安装在所有C#项目中。

如果您的分析更复杂并且需要使用除 .targets 文件之外的程序集(自定义构建任务),您可以使用我用于{{3}的方法} NuGet包,其中包含构建任务,资源和自定义 .props .targets 文件,但没有安装项目所引用的实际程序集。< / p>

  • Antlr4(包括Antlr4包源和构建脚本)

答案 1 :(得分:2)

不是将它添加到解决方案中的所有项目中,为什么不创建某种测试(单元测试,构建文件,等等),可以将项目文件作为输入,解析它,如果OE或更多,则抛出错误引用不正确。比向项目文件添加(和签出,提交等)自定义构建步骤容易得多。

即使您使用之前提出的nuget包,您仍然需要手动检查是否所有项目(200个项目?真的吗?)参考包。