有没有办法阻止某些引用被包含在项目中?

Shi*_*hiv 12 c# reference c#-4.0

基本上我想做一些预防性维护.我希望某些第三方库可以防止在某个项目中作为参考包含在内.有什么方法可以指定项目禁止哪些引用?

编辑:我会澄清一点目的.我想要保护的项目是一个类库,我希望从一组非常特定的第三方库中获得功能.类库用于其他解决方案以实现通用数据访问功能,因此如果引用了这些第三方库,则也需要它们.目的是使一个项目只是一个数据访问库,并保持"包"轻量级.

编辑2:不知道为什么下来投票.对于是否可以完成此类事情,我们感兴趣的是一个问题.

Ben*_*Ben 11

尽管存在这种情况,我认为这是一个合理的问题.我在一个大型开发团队工作,所有人都使用相同的软件,并且遇到类似的问题.

我们使用大型域驱动设计架构,具有许多不同的有界上下文,并且不希望人们在上下文之间添加引用.我们有指南,标准,架构文档,代码审查等,许多事情阻止了IRL的引用(正如有人所说).然而,我们有两个相对较新的初学者,他们对当前的结构没有多少经验,只是不知道所有的东西.他们碰巧审查了彼此的代码和瞧,添加了不需要的参考.

在试图防止错误发生并确保遵守标准方面,我没有看到任何严厉的行为.只是一个预防措施.这也不是我们编写单元测试的部分原因吗?那么未来的其他一些新人可以意识到他们在不知不觉中破坏了什么?

我不特别喜欢分析项目文件的参考文献.我们可能处理它的方法是定义一组单元测试,它们遍历每个被测项目的程序集引用,并在识别不应该存在的引用时失败.显然,只有在您持续集成/部署(包括运行单元测试)时才有效.

因此,即使新人检查了一些东西而没有在本地首先运行单元测试(并意识到他们的错误),我们明亮的红色闪烁构建状态指示灯或构建服务器电子邮件将很快告诉团队中的每个人出了什么问题.

  • Ben,我非常想对这个答案投赞成票,但最后我意识到它实际上并没有提供解决方案。如果在这 5 年里你实现了一些东西,请发布一些代码! (3认同)

Dyl*_*ith 8

您可以使用Visual Studio Layer Diagrams来实现此目的(假设您拥有Visual Studio Ultimate).绘制一个表示项目的框/图层,然后将项目拖放到它上面以链接它们,绘制一个表示禁止组件的框/图层,然后将这些组件放到它上面以链接它们,并完成(通过不绘制之间的依赖关系箭头)你告诉VS,没有允许依赖的图层.

现在通过设置MSBuild属性打开项目和/或TFS Build中的Layer Diagram Validation:ValidateArchitecture = True

  • 事实上,这在技术上不会阻止他们添加引用,但会阻止他们“使用”该引用。 (2认同)

Bre*_*tin 5

这绝对是一个有效的问题,Ben 的回答一针见血。但是,此工具可以帮助自动执行您的参考约束:

警察部


Gay*_*Fow 2

搜索允许的程序集并标记异常可能更实际,因为有人可以简单地将恶意程序集重命名为不在您的列表中的名称并逃避检测。

用于构建程序集的 .csproj 文件是一个普通的 XML 文件,因此可以使用 XPath 语句轻松找到引用的程序集,其中谓词是允许的程序集名称。您可以设置一个触发器,每当将 .csproj 文件签入源存储库时,就会扫描该文件并标记任何罪魁祸首程序集。

使用这种方法或任何类似的方法都会带来邀请流氓开发人员玩青蛙游戏的风险。你很可能会输掉这场游戏,因为开发人员都是出色的蛙跳玩家。因此,更稳健的方法是减少对技术的依赖,而更多地依赖管理资源计划。