合并程序集并使用internal关键字

7

合并程序集是否会改变internal关键字的作用域?

我相当确定它不会产生影响(或者至少不会有什么影响),因为任何引用最终程序集的人都无法访问internal类。

这可能是一个没有实际价值的假设性问题,但我还是很好奇。

编辑:我的意思是使用ILMerge进行合并,而不是将源代码组合成一个可构建的程序集。


合并程序集是什么意思?你是指使用IlMerge吗?从技术上讲,你不能这样做。你可以将程序集模块合并成单个托管的PE32映像。或者你是指在源代码级别上进行合并? - sehe
@sehe 更新了问题。我的意思是使用ILMerge,而不是源代码。 - Dustin Davis
3个回答

10

是的,一旦程序集合并,它们就可以访问彼此的内部类。一些混淆器会利用这一点,将公开调用转换为内部调用,然后对其进行混淆,使其更加安全。 参考:SmartAssembly

顺便提一下,使用ILMerge时,您可以使用/internalize命令行开关,使主要程序集以外的所有公共类都变成内部类,从而将公共接口从最终用户的视线中移除,但程序集仍然正常工作。


3
假设您没有使用完全信任,任何与内部类型合并到最终程序集中的类型现在都可以访问内部类型的公共成员。
因此,考虑程序集A:
public class MyClassA { ... }

并且组件B:

internal class MyClassB { ... }

MyClassA可能没有权限反射MyClassB的公共成员。如果它们合并到同一个程序集中,则MyClassA可能会获得这样的权限。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接