Ste*_*ser 6 .net ilmerge types
我正在使用ILMerge合并几个.NET程序集,包括一些第三方程序集.由于这样做,我遇到了几个错误,这些错误都归结为类型定义与它们所定义的程序集相关联的事实.
一个简单的例子是我的App.config中的log4net配置部分定义.它使用type ="log4net.Config.Log4NetConfigurationSectionHandler,log4net",由于log4net程序集合并到我的合并程序集后不存在,因此无效.不过没什么大不了的,我将程序集名称更改为我的合并程序集,它运行正常.
一个稍微复杂的例子是二进制序列化类型.我的系统使用二进制序列化在进程之间发送某些对象.所有可序列化对象都在一个所有其他项目都引用的公共程序集中定义.我使用的是默认的二进制序列化,但在反序列化对象时出现失败,错误表明它无法找到序列化对象的合并程序集.同样,没什么大不了的,我实现了一个自定义的SerializationBinder,它在任何加载的程序集中查找类型,而不仅仅是给定的类型.
当序列化类型引用其他可序列化类型时,前面的示例变得更加复杂.我继续遇到越来越多越来越难以处理的问题.
我试图在这里得到的一点是,.NET类型系统和ILMerge似乎并不能很好地协同工作.有没有人对他们如何解决这个问题有任何经验?是否有可能告诉.NET运行时我不关心它应该是什么类型的程序集,只需在任何地方查找它?
注意:请不要回答询问为什么我要合并程序集,这不是这个问题的重点.
ram*_*oti -2
欢迎来到代码中字符串和(物理位置)字符串的危险。
所有此类工具都存在类似的问题,并且它们最好是智能的,因为绑定和序列化等运行时功能的许多开发人员和设计人员并没有真正预见到这一点,但他们确实将 ILMerge 推为“智能”工具。它非常聪明,甚至无法修剪类型。
请注意,版本控制在这里也发挥了作用,配置、.* 和他们眼中的明星以及 Redmond 的版本独立性也无济于事。
您肯定会不断遇到第三方位的麻烦。相信我,我知道你需要合并,因为一些可悲的少量类型可能需要很长时间才能让 MS JIT 启动大型应用程序(不,我不希望 NGEN 或优化的 3.5SP1 加载比以前更慢由于 System.Core 或天上禁止的 WPF 膨胀)。
恕我直言,至少在大规模上,最好的选择是获得一个像样的商业工具来扫描和处理这个问题(即从现有的痛苦和混淆经验中)。从长远来看,如果没有源代码,您可能最终会检测现有的 IL 代码。
[ 然后有一个 INotifyPropertyChanged 字符串发明,解决了全球变暖问题 - 由 Casio-Calc 发明家设计 ]
| 归档时间: |
|
| 查看次数: |
1408 次 |
| 最近记录: |