ILMerge使用processorArchitecture = x86输出程序集

时间:2014-01-22 14:28:17

标签: c# .net assembly ilmerge

我对ILMerge有一个问题,最新版本为2.12.0803。即使我的程序集的处理器体系结构设置为MSIL,输出合并程序集也有x86。

我运行ILMerge的方式是:

ILMerge.exe /t:library /targetPlatform="v4,C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0" /keyfile:key.snk /output:"Test.dll" a.dll b.dll ... other assemblies

在构建时我发出警告:

  

项目的处理器架构之间存在不匹配   正在构建“MSIL”和参考的处理器架构   “测试”,“x86”

并且在运行时我得到一个File Not found Exception:

  

无法加载文件或程序集'Test,Version = 3.9.32.0,Culture = neutral,PublicKeyToken = 8fd4d0b13dde34b0'或其中一个   依赖。系统找不到指定的文件。

运行gacutil:

  

C:\ Windows \ system32> gacutil / l“Test,Version = 3.9.32.0,   Culture = neutral,PublicKeyToken = 8fd4d0b13dde34b0“Microsoft(R).NET   Global Assembly Cache Utility。版本4.0.30319.17929版权所有(c)   微软公司。保留所有权利。

     

全局程序集缓存包含以下程序集:Test,   Version = 3.9.32.0,Culture = neutral,PublicKeyTok en = 8fd4d0b13dde34b0,   ProcessorArchitecture用于= 86

有没有办法将processorArchitecture更改为合并程序集的MSIL?

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。问题是其中一个程序集需要32位,请参阅ServiceStack.Redis。

来自ILMerge日志文件:

检查所有输入程序集是否具有兼容的PeKind。

ServiceStack.PeKind = ILonly
ServiceStack.Interfaces.PeKind = ILonly
ServiceStack.Common.PeKind = ILonly
ServiceStack.OrmLite.PeKind = ILonly
ServiceStack.Redis.PeKind = ILonly, Requires32bits
ServiceStack.ServiceInterface.PeKind = ILonly
ServiceStack.Text.PeKind = ILonly
log4net.PeKind = ILonly