【发布时间】:2016-11-01 13:30:25
【问题描述】:
是否可以在同一个 .net 项目中结合 32 位和 64 位 dll? 我收到此错误:
An attempt was made to load a program with an incorrect format
【问题讨论】:
标签: c# .net web-services
是否可以在同一个 .net 项目中结合 32 位和 64 位 dll? 我收到此错误:
An attempt was made to load a program with an incorrect format
【问题讨论】:
标签: c# .net web-services
确实可以在同一个项目中添加/使用这样的程序集。
不可能在运行时加载架构不匹配的程序集,但这在代码中相对容易处理 - 检查架构并仅使用相应程序集中的类。
【讨论】:
如果您只使用托管程序集,请指定任何 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)
【讨论】: