隐藏类型在.net中的Assembly.GetTypes中列出

时间:2011-12-19 23:36:36

标签: c# reflection assemblies hidden

我一直在寻找可能的解决方案,但似乎无法找到答案。我的问题是我有一些类需要完全隐藏在Assembly.getTypes中,因为我正在为一个应用程序编写一个插件,它正在拾取我需要保持隐藏的类型(即使它们被声明为私人或内部课程。)

任何人都知道如何改变assembly.GetTyes返回的内容,或者是一个让这些类型不被列出的aficionado属性?

3 个答案:

答案 0 :(得分:6)

这是一个非常破坏,非常脆弱,但可以工作。

创建2个程序集 - 一个用于插件,第二个用于其他类型。第二个将被放置在另一个已知目录中,并在需要时动态加载到第一个已知目录中。 (例如,通过Assembly.LoadFrom。)

然后将第一个程序集放在插件目录中,并且只发布其类型。这非常脆弱,因为您可能不得不硬编码第二个程序集的路径,并且存在文件被删除或移动的风险。

修改
@SLaks的评论消除了这个解决方案的脆弱性。如果您将第二个程序集作为资源嵌入并在运行时加载它,则调用Assembly.GetTypes的应用程序将看不到您想要隐藏的类型。

答案 1 :(得分:2)

这是不可能的。
遗憾。

调用Assembly.GetTypes()的代码通常应仅过滤public种类型。

答案 2 :(得分:0)

欢迎使用托管代码。 .NET的类型验证程序需要完整的类型信息。只能从.NET元数据中隐藏本机代码,然后您放弃纯MSIL支持的可移植性和权限。