我们正在围绕非托管DLL创建一个C#包装器.非托管DLL有32和64位版本.我们将托管包装器保留在自己的项目中,以便我们可以将其构建为单独的组件并在整个解决方案中重用它.
然而,这会导致一些问题.由于非托管DLL对于32位和64位版本具有相同的名称,因此我们无法将正确的非托管DLL移动到输出(bin)目录.如果构建配置是x86,我们要复制32位版本,使用x64复制64位.只需一个处理器架构,这很容易实现.我们只在项目中包含非托管DLL,并在文件上将copy local设置为true.但是因为我们需要针对它更加棘手.
我们发现这个链接Targeting both 32bit and 64bit with Visual Studio in same solution/project但这似乎引用了机器上已经存在的一些DLL.我们希望将DLL的正确版本复制到输出目录(bin).
解决方法
我刚刚使用FreeImage库的.Net包装器解决了同样的问题.我所做的是创建两个构建配置,一个用于x86,一个用于x64,用于引用托管包装器的项目.我在项目文件的AfterBuild目标中添加了msbuild条件复制部分,如下所示:
<Target Name="AfterBuild"> <Copy Condition="'$(Platform)' == 'X86'" SourceFiles="$(MSBuildProjectDirectory)\Resources\x86\FreeImage.dll" DestinationFolder="$(TargetDir)" /> <Copy Condition="'$(Platform)' == 'X64'" SourceFiles="$(MSBuildProjectDirectory)\Resources\x64\FreeImage.dll" DestinationFolder="$(TargetDir)" /> </Target>