使用包含32位和64位程序集的项目运行.net web服务
本文关键字:运行 项目 net web 服务 程序集 包含 32位 64位 | 更新日期: 2023-09-27 18:15:58
是否有可能在同一个。net项目中组合32位和64位dll ?我得到这个错误:
An attempt was made to load a program with an incorrect format
确实可以在同一个项目中添加/使用这样的程序集。
不可能在运行时加载结构不匹配的程序集,但在代码检查体系结构中相对容易处理,只使用相应程序集的类。
如果只使用托管程序集,请指定Any CPU平台目标。
如果您通过[DllImport]只使用项目中的本地库-只需以不同的名称将它们包含到您的项目中,例如native.x86.dll
和native.x64.dll
,并选择合适的类似代码:
[DllImport("native.x86.dll")]
public static extern int ExtrernalFunc86();
[DllImport("native.x64.dll")]
public static extern int ExtrernalFunc64();
// ....
if (IntPtr.Size == 8) return ExternalFunc64();
else return ExternalFunc86();
如果您使用针对特定CPU(具有相同API)的托管库,您可以引用其中一个,但将两者复制到输出文件夹(使用构建脚本)并通过AppDomain.CurrentDomain.AssemblyResolve
事件(使用IntPtr.Size
检查架构)选择适当的版本