最近我找到了一些允许.NET库在Windows应用程序中合并的工具。
现在真正的问题是库的行为如何改变,
- 内部类是否在库内部?还是它成为应用程序的内部它已与? 合并
- 是否有机会库会故障?
扩展问题:
- 合并内部组件时,应该将其合并为合并的应用程序不能使用?
除非嵌套,否则不能是私有的。
但是请考虑以下内容:如果您要合并组件A和B,则必须在合并之前已经对它们进行了编译。当它们被编译时,每种的内部方法都无法访问。因此,在合并的代码中,没有任何方法可以调用其他组件的内部方法。
不应该在合并内部组件时将其私有化,以便将其合并的应用程序不能使用?
那将如何工作?如果顶级类型是私有的,则根本没有其他类型可以访问它。这就是为什么您无法定义私有类型(除非它们嵌套在其他类型中)。
假设组件A具有C类,其中C是内部的,并且D调用了C类C的某些方法。当C类私有时(在CTS的某些假设版本中,这是可能的),D类断开。
未嵌套到其他类型的顶级类型只能具有内部或公共可访问性。这些类型的默认可访问性是内部的。
来自MSDN链接
1内部类仍然是库的内部?还是合并了该应用程序的内部?
它仍然是应用程序的内部。
2是否有库会故障?
从技术上讲,这是可能的。假设A类是APP的内部,也是LIB之一(具有相同名称空间)。在合并之前,不会有任何问题。合并后,解决模棱两可的参考将成为问题。
应用程序(SmartAssemply/Ilmerger)如何处理这些是另一个问题(我不知道)?他们可能会选择提供错误信息,或者可能不提供错误信息。他们可能会选择转换或可能不会转换。
不应该在合并内部组件时将其私有化,以便将其合并的应用程序不能使用?
作为指定的顶级类型不能私有/受保护。
msdn很清楚:
内部类型或成员仅在同一汇编中的文件中访问...
由于您将它们合并到一个组件中,因此内部类可用于合并的汇编中的所有文件。
ilmerge可能会破坏库,尽管这只有在库设计不佳的情况下才会发生。
断裂与internal
无关。但是,如果使用反射来测试从中加载什么组件或在特定组件中搜索类型,则结果将会更改。
我比internal
更担心合并对代码访问安全属性的影响。但本质上,不要合并需要以不同级别的信任级运行的组件。