当内部班级与诸如ilmerge或smartAssembly之类的工具合并时,会变得私密吗?



最近我找到了一些允许.NET库在Windows应用程序中合并的工具。

现在真正的问题是库的行为如何改变,

  1. 内部类是否在库内部?还是它成为应用程序的内部它已与?
  2. 合并
  3. 是否有机会库会故障

扩展问题:

  1. 合并内部组件时,应该将其合并为合并的应用程序不能使用?

除非嵌套,否则不能是私有的。

但是请考虑以下内容:如果您要合并组件A和B,则必须在合并之前已经对它们进行了编译。当它们被编译时,每种的内部方法都无法访问。因此,在合并的代码中,没有任何方法可以调用其他组件的内部方法。

不应该在合并内部组件时将其私有化,以便将其合并的应用程序不能使用?

那将如何工作?如果顶级类型是私有的,则根本没有其他类型可以访问它。这就是为什么您无法定义私有类型(除非它们嵌套在其他类型中)。

假设组件A具有C类,其中C是内部的,并且D调用了C类C的某些方法。当C类私有时(在CTS的某些假设版本中,这是可能的),D类断开。

未嵌套到其他类型的顶级类型只能具有内部或公共可访问性。这些类型的默认可访问性是内部的。

来自MSDN链接

1内部类仍然是库的内部?还是合并了该应用程序的内部?

它仍然是应用程序的内部。

2是否有库会故障?

从技术上讲,这是可能的。假设A类是APP的内部,也是LIB之一(具有相同名称空间)。在合并之前,不会有任何问题。合并后,解决模棱两可的参考将成为问题。

应用程序(SmartAssemply/Ilmerger)如何处理这些是另一个问题(我不知道)?他们可能会选择提供错误信息,或者可能不提供错误信息。他们可能会选择转换或可能不会转换。

不应该在合并内部组件时将其私有化,以便将其合并的应用程序不能使用?

作为指定的顶级类型不能私有/受保护。

msdn很清楚:

内部类型或成员仅在同一汇编中的文件中访问...

由于您将它们合并到一个组件中,因此内部类可用于合并的汇编中的所有文件。

ilmerge可能会破坏库,尽管这只有在库设计不佳的情况下才会发生。

断裂与internal无关。但是,如果使用反射来测试从中加载什么组件或在特定组件中搜索类型,则结果将会更改。

我比internal更担心合并对代码访问安全属性的影响。但本质上,不要合并需要以不同级别的信任级运行的组件。

相关内容

  • 没有找到相关文章

最新更新