繁体   English   中英

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

[英]Check binary references in a solution

我正在寻找一种方法来检测大型Visual Studio解决方案中的程序集引用问题:

  • 对错误位置的二进制引用,例如不在源代码管理或另一个项目的输出中的路径
  • 解决方案中跨项目的对同一装配体多个版本的二进制引用
  • 没有路径的二进制引用,可以将其重定向到GAC
  • 二进制引用应该是项目引用

整个故事

我从事的大型C#项目涉及将近200个项目。 随着时间的流逝,存在的问题之一是添加了对程序集的引用,但并不总是引用相同的版本或正确的位置。

例如,一个项目可能没有提示路径就获得了对System.Web.Mvc的引用,从而使其引用了GAC中的任何版本。 Visual Studio(和Resharper)还将提供添加丢失的引用的方法,但是可以通过将引用添加到另一个项目的输出文件夹来实现。

现在,最近的Windows Update灾难性事件使一些团队成员陷入水中,无法建立解决方案。 可以想象,这为我们提高了装配参考管理的优先级。

为了检测一些最明显的问题,我已经设置了一个msbuild文件,该文件可以包含在每个csproj文件中,并将检测错误的引用。

但是,新项目文件将需要手动编辑以包括该脚本。 因此,这将不可避免地被遗忘。

我真正想要的是在连续构建过程中检查解决方案中的所有项目文件是否存在“错误”引用,以便始终检查所有项目。

我一直在寻找类似的解决方案已有一段时间了,发现了很多静态分析和代码分析工具,但是没有什么可以分析解决方案中的项目文件。

因此,在我提出自己的解决方案之前,已经有办法做到这一点吗?

更新资料

为了清理代码库,我创建了一些ScriptCS代码,它将扫描所有csproj文件以引用Nuget程序包中的程序集并进行修复。 在GitHub上

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

如果创建类似的程序包,则很容易在解决方案节点上单击鼠标右键,并确认该程序包已安装在所有C#项目中。

如果您的分析更加复杂,并且除了.targets文件之外还需要使用程序集(自定义构建任务),则可以使用与Antlr4 NuGet包类似的方法,其中包含构建任务,资源和custom 。 props.targets文件,但没有安装该项目所引用的实际程序集。

与其将其添加到解决方案中的所有项目中,不如创建某种测试(单元测试,构建文件等),以将项目文件作为输入,对其进行分析,如果OE或更多引用不正确,则引发错误。 比向项目文件添加(以及检出,提交等)自定义构建步骤要容易得多。

即使您使用了先前提出的nuget程序包,您仍然必须手动检查是否所有项目(200个项目?真的吗?)都引用了该程序包。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM