依赖于C ++ / CLI的任何CPU依赖于本机C dll(c ++ / cli的任何cpu)

这是我的问题。 我在C#中包装一个C dll。 为此,我首先编写了一个C ++ / CLI包装器。 本机C库链接到C ++ / CLI包装器。 (C ++ / cli项目中的链接器属性)。

以下是它现在的组织方式: – 原生C .lib:x86和64bit。

  • 1解决方案包含2个项目:
    • 与本机C .lib链接的C ++ / CLI包装器项目
    • C#项目引用C ++ / CLI项目

我的问题来自于我需要C#来定位“任何CPU”。 但是此选项在C ++ / CLI中不可用,因为它直接编译为本机代码。

我解决这个问题的想法是: – 在x86中编译C ++ / CLI包装器,然后更改配置并编译为64位。 当它编译时,我想告诉它基于平台采取哪个dll。 即:如果在64位编译,链接64位本机C dll,否则如果x86,链接x86本机C. – 完成后,我应该能够在我的C#平台中拥有任何CPU目标。 在这里,我将不再引用我的C ++ / CLI包装器项目,而是基于目标平台引用所需的dll。

我的问题是:

  • 如何告诉C ++ / CLI项目基于目标平台链接到哪个.lib?
  • 如何告诉C#项目基于目标平台引用哪个C ++ / CLI dll?

让我补充一点, C#项目是一个由x86或x64客户端使用的CLASS LIBRARY

我希望我的问题很清楚。 任何帮助将不胜感激!

UPDATE基于: .NET项目中的条件引用,可以摆脱警告? …

所以现在我已经使用条件编辑我的.csproj文件来引用dll,如下所示:

  False ..\x64\Debug\AlibCppWrapper.dll   False ..\Debug\AlibCppWrapper.dll   

不幸的是,这不起作用,因为$(平台)设置为AnyCPU …

你所描述的被称为“并排组装”(同一组件的两个版本,一个32和另一个64位)…我认为你会发现这些有用:

编辑 – 根据评论:

在这里,您可以找到完全符合您的场景的演练(.NET DLL包装引用本机DLL的C ++ / CLI DLL) http://scottbilas.com/blog/automatically-choose-32-or-64-bit-mixed-mode-动态链接库/