限制为程序集添加引用

时间:2011-08-01 14:38:37

标签: c# visual-studio-2010

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

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

2 个答案:

答案 0 :(得分:5)

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

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

编辑:另一种选择可能是使用ILMerge在最后构建一个程序集 - 所以它是部署的真正单位,即使你最初出于分离原因将其分开。

另一个替代方案是将所有内容合并到一个项目中,并依靠代码审查,命名空间和常识来挑选违规行为。

答案 1 :(得分:4)

您可以在其他程序集internal中创建所有类型,以防止它们在定义程序集之外被使用。

您可以使用[InternalsVisibleTo] attribute使其他程序集可见。