合并程序集会改变 internal 关键字的范围吗?
我相当肯定它不会产生影响(或至少不会产生影响),因为任何引用最终程序集的人都无法访问内部类。
这可能是一个没有现实价值的假设问题,但我仍然很好奇。
编辑:我的意思是使用 ILMerge,而不是将源代码组合到一个可构建的程序集中。
合并程序集会改变 internal 关键字的范围吗?
我相当肯定它不会产生影响(或至少不会产生影响),因为任何引用最终程序集的人都无法访问内部类。
这可能是一个没有现实价值的假设问题,但我仍然很好奇。
编辑:我的意思是使用 ILMerge,而不是将源代码组合到一个可构建的程序集中。
是的,一旦程序集被合并,它们就可以访问彼此的内部类。一些混淆器专门利用这一点将程序集之间的公共调用转换为内部调用,然后对其进行混淆,使其更安全。参考:SmartAssembly
附带说明一下,使用 ILMerge,您可以使用 /internalize 命令行开关,这将使程序集中的所有公共类(而不是主程序集内部),这从最终用户的眼中删除公共接口,但程序集仍然正常运行。
假设您没有以 full-trust 运行,任何与内部类型合并到最终程序集中的类型现在都可以访问内部类型的公共成员。
所以给定程序集A:
public class MyClassA { ... }
和组件 B:
internal class MyClassB { ... }
MyClassA 可能无权反映 MyClassB 的公共成员。如果它们被合并到同一个程序集中,那么 MyClassA 可能会获得这样的权限。
Another possible resource for more info is Microsoft Research's ILMerge page, where they offer an alternative to ILMerge