我最近遇到了一个问题(之前没有注意到),合并 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
Running on Microsoft (R) .NET Framework v4.0.30319
mscorlib.dll
version = 4.0.0.0
输入程序集列表为:[Source].dll、[ToMerge].dll
-尝试从文件“[Source].dll”中读取程序集。
在汇编中成功读取。
[Source] 的元数据中没有报告错误。
-尝试从文件“[ToMerge].dll”中读取程序集。
在汇编中成功读取。
[ToMerge] 的元数据中没有报告错误。
- 检查所有输入程序集是否具有兼容的 PeKind。
[Source].PeKind = ILonly
[ToMerge].PeKind = ILonly
-所有输入程序集都有一个兼容的 PeKind 值。
[多个 AssemblyResolver 部分,每个部分都以成功结尾]
- 使用程序集“[源]”作为目标程序集的程序集级属性。
-将程序集“[源]”合并到目标程序集中。
-将程序集“[ToMerge]”合并到目标程序集中。
- 重复类型名称:将类型“[SomeAnonymousType]”(从程序集“[ToMerge]”)的名称修改为“[ToMerge].[SomeAnonymousType]” -
将 1 个 Win32 资源从程序集“[Source]”复制到目标程序集。
-ILMerge:使用密钥文件“:[pathToSNK]”签署程序集。
目标程序集的元数据中没有报告错误。
-ILMerge:编写目标程序集“[Target].dll”。
[多个 AssemblyResolver 部分,每个部分都以成功结尾]
-ILMerge:使用强名称签名的程序集“[Source].dll”。[许多没有错误的位置]
-ILMerge:完成。
PEVerify.exe /MD /IL [Target].dll
35 个错误(212 个警告)。