Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 限制为程序集添加引用_C#_Visual Studio 2010 - Fatal编程技术网

C# 限制为程序集添加引用

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

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


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

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


您可以使用使它们对其他程序集可见。

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


您可以使用使它们对其他程序集可见。

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

这样,最终开发人员仍然可以添加对受限制程序集的引用,并且可能应该这样做,以确保复制这些程序集进行部署,但不能使用这些程序集中的任何类型

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


另一种选择是将所有内容合并到一个项目中,并依靠代码审查、名称空间和常识来发现分离冲突。

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

这样,最终开发人员仍然可以添加对受限制程序集的引用,并且可能应该这样做,以确保复制这些程序集进行部署,但不能使用这些程序集中的任何类型

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


另一种选择是将所有内容合并到一个项目中,并依靠代码审查、名称空间和常识来发现违反分离的情况。

是的,但即使是我的程序集也无法访问它。我希望框架程序集可以访问它们only@hungry:使用[InternalsVisibleTo]是,但即使是我的程序集也无法访问它。我希望框架程序集可以访问它们only@hungry:使用[InternalsVisibleTo]我是否可以避免在InternalsVisibleTo中使用公钥,而只允许在应用程序目录中使用程序集。@Hunger:我不知道这一点,不知道。但这确实是一个一次性的难题。将所有使用ILMerge的程序集合并到一个程序集,并将其发送给您的用户。不要用你的内部架构来烦扰你的用户。开发人员需要包含许多程序集,而所有相关类型都只包含在一个程序集中,这让人非常不愉快。@Steven:讽刺的是,我刚刚编辑了我的答案,以包含ILMerge:属性在运行时中没有任何作用,那么它如何允许包含已知的程序集呢?开发人员也可以使用反射使用我的类型吗?只是好奇?我是否可以避免在InternalsVisibleTo中使用PublicKey,而只允许在应用程序目录中使用程序集。@Hunger:我不知道,不。但这确实是一个一次性的难题。然后使用ILMerge将所有程序集合并到一个程序集,并将其发送给您的用户。不要用你的内部架构来烦扰你的用户。开发人员需要包含许多程序集,而所有相关类型都只包含在一个程序集中,这让人非常不愉快。@Steven:讽刺的是,我刚刚编辑了我的答案,以包含ILMerge:属性在运行时中没有任何作用,那么它如何允许包含已知的程序集呢?开发人员也可以使用反射使用我的类型吗?只是好奇?