这个问题已经在这里有了答案: > Target 32 Bit or 64 Bit native DLL depending on environment 3个
我正在创建一个类库,希望最终将其放在NuGet上.现在,它的目标是AnyCPU.
现在,我想将PInvoke插入DLL,该DLL具有32位和64位版本.最初,我以为我只会使用32位版本,但这引发了BadImageFormatException.我将库更改为仅针对X86,并且在此方法有效的同时,它也要求调用者也是32位进程.这对于NuGet项目自然不起作用.
感谢有关如何使用本机库的32/64位版本以及如何将其打包到NuGet中的任何想法(最好不要使用2个不同的程序集).
解决方法:
您可以在运行时检查平台并将PInvoke插入不同的DLL.
static void NativeFuncWrapper(){
if(Environment.Is64BitProcess){
NativeFuncWrapper64(); //this calls 64-bit dll
}else{
NativeFuncWrapper32(); //this calls 32-bit dll
}
}
如果希望它在不使用Environment.Is64BitProcess的情况下工作,请阅读How to know a process is 32-bit or 64-bit programmatically以获取替代方法.