[英]x86 Assembly in x64 Appdomain - x86 exe works, x86 dll fails
[英]ILMerge outputs assembly with processorArchitecture=x86
我对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”的处理器体系结构与参考“ Test”,“ x86”的处理器体系结构之间不匹配
在运行时,我得到了File Not found异常:
无法加载文件或程序集'Test,版本= 3.9.3.2,区域性=中性,PublicKeyToken = 8fd4d0b13dde34b0'或其依赖项之一。 该系统找不到指定的文件。
运行gacutil:
C:\\ Windows \\ system32> gacutil / l“测试,版本= 3.9.32.0,区域性=中性,PublicKeyToken = 8fd4d0b13dde34b0” Microsoft(R).NET全局程序集缓存实用程序。 版本4.0.30319.17929版权所有(c)Microsoft Corporation。 版权所有。
全局程序集缓存包含以下程序集:测试,版本= 3.9.32.0,文化=中性,PublicKeyTok zh = 8fd4d0b13dde34b0,processorArchitecture = x86
有没有办法将合并的程序集的processorArchitecture更改为MSIL?
我解决了这个问题。 问题在于其中一个程序集需要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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.