我最近遇到了一个问题(之前没有注意到),合并2个程序集会导致一个或多个类型“丢失”它们的基类型(System.Object) - 打破任何在内部或外部使用反射的尝试得到的组件。
两个程序集都基于.NET 4.5,主程序集是ASP.NET MVC 4应用程序。在使用新的Web API及其相关的依赖项解析器(因此我无法控制的反射)之前,我能够解决反射问题。
请注意,合并本身没有错误\问题,针对正确的v4; [程序文件 - 引用的程序集],基于AnyCPU等等(我几乎100%确定我已涵盖所有案例 - 可能是错的:))
还有其他人遇到过这个吗?我该如何解决这个问题?
编辑:2013年3月20日
ILMerge版本2.13.307.0
版权所有(C)Microsoft Corporation 2004-2006。保留所有权利。
ILMerge / ndebug / useFullPublicKeyForReferences / keyfile:[pathToSNK] /log:output.log /targetplatform:v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319 / lib:[ManyOfThese] / align:4096 / out:[目标] .dll [来源] .dll [ToMerge] .dll
将平台设置为'v4',使用目录'C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319'for mscorlib.dll
在Microsoft(R).NET Framework v4.0.30319上运行
mscorlib.dll版本= 4.0.0.0
输入程序集列表为:[Source] .dll,[ToMerge] .dll
- 从文件'[Source] .dll'中读取程序集
成功阅读大会。
[Source]的元数据中没有报告错误
- 从文件'[ToMerge] .dll'中读取程序集
成功阅读大会。
[ToMerge]的元数据中没有报告错误
- 检查所有输入组件是否具有兼容的PeKind
[来源] .PeKind = ILonly
[ToMerge] .PeKind = ILonly
- 所有输入组件都具有兼容的PeKind值
[许多AssemblyResolver部分,每个部分都以成功结束]
- 使用程序集“[Source]”作为目标程序集的程序集级属性
- 将组件'[Source]'合并到目标组件中。
- 将组件“[ToMerge]”合并到目标组件中
- 重复类型名称:修改类型'[SomeAnonymousType]'的名称(从程序集'[ToMerge]')到'[ToMerge]。[SomeAnonymousType]'
- 将程序集“[Source]”中的1个Win32资源复制到目标程序集中
-ILMerge:使用密钥文件':[pathToSNK]'签署程序集
目标程序集的元数据中没有报告错误
-ILMerge:编写目标程序集'[Target] .dll'。
[许多AssemblyResolver部分,每个部分都以成功结束]
-ILMerge:签名程序集'[Source] .dll'具有强名称。 [多个没有错误的地方]
-ILMerge:完成。
PEVerify.exe / MD / IL [目标] .dll
35错误(212警告)。