合并程序集是否会更改内部关键字的范围?
我相当肯定它不会产生影响(或者至少有一个影响),因为任何引用最终程序集的人都无法访问内部类。
这可能是一个没有现实世界价值的假设性问题,但我很好奇。
编辑:我的意思是ILMerge,而不是将源代码组合到一个可构建的程序集中。
答案 0 :(得分:10)
是的,一旦程序集合并,它们就可以访问彼此的内部类。一些混淆器特别利用这一点来使程序集之间的公共调用成为内部调用,然后对它们进行模糊处理以使其更安全。参考:SmartAssembly
另一方面,使用ILMerge,您可以使用/ internalize命令行开关,它将使主程序集内部以外的程序集中的所有公共类都从最终用户的眼睛中移除公共接口,但仍然是程序集函数通常
答案 1 :(得分:3)
假设您没有以完全信任的方式运行,那么与内部类型合并到最终程序集中的任何类型现在都可以访问内部类型的公共成员。
所以给定汇编A:
public class MyClassA { ... }
和汇编B:
internal class MyClassB { ... }
MyClassA可能无权反映MyClassB的公共成员。如果它们合并到同一个程序集中,那么MyClassA可能会获得这样的权限。
答案 2 :(得分:1)
更多信息的另一个可能资源是Microsoft Research's ILMerge page,他们提供an alternative to ILMerge