c# – 为32位和64位非托管DLL创建托管包装器

前端之家收集整理的这篇文章主要介绍了c# – 为32位和64位非托管DLL创建托管包装器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们正在围绕非托管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>
原文链接:https://www.f2er.com/csharp/244165.html

猜你在找的C#相关文章