如何在Xamarin.Android和Xamarin.iOS上使用dllmap?

时间:2015-04-13 06:10:28

标签: c# mono xamarin.ios xamarin.android dllimport

我正在使用Xamarin.Android,有一个像这样设置的项目

  • Windows的本机库(NativeMethods.dll)
  • Android的原生图书馆(NativeMethods.so)
  • Portable P / Invoke库,DllImport到NativeMethods.dll
  • Windows应用程序(使用可移植的P / Invoke库+ Windows本机库)
  • Android应用程序(使用便携式P / Invoke库+ Android本机库)

使用mono,可以简单地在App.config中使用dllmap将任何DllImports重新映射到NativeMethods.dll到NativeMethods.so

我试过,但我似乎无法使用Xamarin.Android。我想避免编译两个MSIL P / Invoke库以及两个本机库(Android和Windows各一个)。

这是我的app.config看起来像什么

  <?xml version="1.0" encoding="utf-8" ?>
  <configuration>
    <dllmap dll="NativeMethods.dll" target="NativeMethods.so"/>
  </configuration>

我在P / Invoke DLL项目,Xamarin.Android应用程序项目中尝试了这个,但它在任何地方都不起作用。我发现问题的唯一参考是this与iOS相似的参考。有没有人遇到/解决了这个问题?我错过了什么?如果为Xamarin.iOS执行此操作的解决方案有任何不同,我也会感兴趣,因为这将是我需要定位的下一个平台。

提前致谢!

1 个答案:

答案 0 :(得分:3)

使用NativeMethods(不带扩展名)作为库的名称。

.NET将自动附加.dll,Mono会在搜索库时自动附加.so

但是对于iOS,你需要一个dllmap(因为库名必须是__Internal

来源:http://www.mono-project.com/docs/advanced/pinvoke/