加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 08:36:01 所属栏目:百科 来源:网络整理
导读:我们正在围绕非托管DLL创建一个C#包装器.非托管DLL有32和64位版本.我们将托管包装器保留在自己的项目中,以便我们可以将其构建为单独的组件并在整个解决方案中重用它. 然而,这会导致一些问题.由于非托管DLL对于32位和64位版本具有相同的名称,因此我们无法将正
我们正在围绕非托管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)Resourcesx86FreeImage.dll" DestinationFolder="$(TargetDir)" />
    <Copy Condition="'$(Platform)' == 'X64'" SourceFiles="$(MSBuildProjectDirectory)Resourcesx64FreeImage.dll" DestinationFolder="$(TargetDir)" />
  </Target>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读