<rrconfig>
<!-- The core library should have no local dependencies -->
<!-- Data access libraries should not be included as data access should be in the data library -->
<rules project="RR.Core">
<nolocalrefs/>
<exclude>EntityFramework</exclude>
<exclude>EntityFramework.SqlServer</exclude>
</rules>
<!-- The data library should only have access to the core library and no other local libs. -->
<!-- Data access libraries should definitely be included -->
<rules project="RR.Data">
<onlylocalrefs>
<project>RR.Core</project>
</onlylocalrefs>
<include>EntityFramework</include>
<include>EntityFramework.SqlServer</include>
</rules>
</rrconfig>
3条答案
按热度按时间n3ipq98p1#
您不能直接或强制阻止引用,但您可以自己设置引用,这将有助于您的方案,因为人们将无法将引用添加回去(硬循环引用)。这并不能阻止人们使用像MEF或Unity这样的库,以一种非常松散的解耦方式到处跳跃--他们完全有可能解析或加载您不需要的程序集。不要期待并调用它们(我称之为逻辑循环依赖)。防止这种情况的唯一方法是通过代码审查保持警惕。
一旦正确设置了引用,就可以监控项目文件的更改,以告知何时添加了其他硬引用。任何源代码控制系统都可以轻松地进行版本比较,有些系统(例如TFS)甚至允许在特定文件更改时(例如项目文件更改时)通知您。
再一次,您拥有的最可靠的选择是代码评审。
nzkunb0c2#
我刚通过Nuget下载了Visual Studio的Ref-Restrict。现在看起来还可以。
它检查每个项目的引用,并根据一组自定义规则(限制)进行检查。生成解决方案或项目时,如果存在任何冲突,则生成将停止。确切的问题将在Visual Studio中报告为生成错误。
配置如下所示:
博客:http://www.benibinson.com/blog/2014/8/31/restrict-project-references-with-ref-restrict
源代码和安装说明:https://github.com/CodeHex/Ref-Restrict
sqserrrh3#
如果引用了不需要的程序集,您可以阻止生成项目,但如果只能通过某些外部工具来完成,则必须考虑使此检查的生成过程复杂化的相对优点。
如果引用了不需要的程序集,最好以编程方式使应用程序的启动失败。
下面的代码:
将为您提供当前正在执行的程序集引用的所有程序集的名称。然后,您可以检查此名称列表是否包含不需要的程序集的名称。
有关详细信息,请参见https://stackoverflow.com/a/72460117/773113