限制程序集的添加引用

本文关键字:添加 引用 程序集 | 更新日期: 2023-09-27 18:04:14

我有一个包含几个程序集的框架。由于代码的逻辑分离,创建了多个程序集。这个框架应该分发给开发人员和最终用户。开发人员应该使用很少的框架程序集来开发他们的模块。但是需要所有其他程序集来运行这些模块。在几个程序集中,我希望只有几个程序集可以添加到项目引用中,并限制其他程序集添加到开发人员项目引用中。换句话说,我希望开发人员不应该能够使用程序集中包含的类型,这些类型不是用于插件开发的。最好的方法是什么?我想避免将一些对象传递给这些程序集中每种类型的构造函数并验证它们。

我可以利用AppDomain或任何类似的东西,它识别类型是由主应用程序或模块创建的。如果它不是主应用程序,则抛出异常或不初始化。建议对架构进行任何更改。

限制程序集的添加引用

一种选择是将"受限制"程序集中的类型设置为内部类型而不是公共类型,然后在这些受限制的程序集中添加InternalsVisibleToAttribute以允许从其他"框架"程序集中访问它们。

这样,最终开发人员仍然可以添加对"受限"程序集的引用(可能应该这样做,以确保它们在部署时被复制),但不能使用这些程序集中的任何类型。

编辑:另一种选择可能是使用ILMerge在最后构建一个汇编-因此它是部署的真正单元,即使您最初出于分离原因将其拆分。

另一种选择是将所有内容合并到一个项目中,并依靠代码审查,命名空间和常识来挑选分离违规

您可以将其他程序集中的所有类型设置为internal,以防止它们在其定义程序集之外使用。

您可以使用[InternalsVisibleTo]属性使它们对其他程序集可见。