我对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?
答案 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