是否有等效于MSBuild的DllMap

时间:2019-08-20 06:03:46

标签: c# .net msbuild sfml visual-studio-mac

所以我试图使用Visual Studio 2019 Community Edition在Mac OS Mojave上编写C#应用程序。我正在使用一个名为SFML.Net的库。有一个C绑定,称为CSFML。似乎SFML.Net使用CSFML动态库(即libcsfml-graphics.2.5.0.dylib)来进行底层工作。

我创建了一个C#项目并添加了SFML.Net NuGet。至此,项目 builds 正常运行,没有错误。但是,如果我运行项目,则会收到System.DllNotFoundException,消息仅为csfml-graphics

SFML.Net download page现在要说的是:

  

由于它是.Net库,因此每个体系结构只有一个存档,   适用于任何操作系统和编译器。但是,由于CSFML的名称   库出现在源代码中,并且在每个操作系统上都不同,对于   在OS X和Linux中,您将必须编写一个特殊的配置文件   将CSFML DLL的名称映射到   操作系统上对应的CSFML共享库(例如,   “ csfml-graphics-2.dll”->“ libcs​​fml-graphics.so.2”);有关更多详细信息,请参见the Mono documentation

因此,我将.dylib文件复制到了项目的bin / Debug文件夹中。现在,根据该Mono文档链接,我可以在Mono中执行一个简单的DLL映射:

<configuration>
  <dllmap dll="csfml-graphics.dll" target="libcsfml-graphics.2.5.0.dylib"/>
</configuration>

不幸的是,根据this Microsoft documentation,Visual Studio for Mac似乎不再使用Mono:

  

MSBuild是由Microsoft开发的构建引擎,可用于   主要是.NET应用程序的构建。 Mono框架也有   它自己的Microsoft Build Engine实现,称为xbuild。   但是,xbuild已被淘汰,赞成在所有版本上使用MSBuild   操作系统。

     

MSBuild主要用作以下项目的构建系统:   Mac版Visual Studio。

MSBuild中是否有Mono的dllmap类似物?我需要告诉.Net运行时,它应该寻找csfml-graphics.dll而不是寻找libcsfml-graphics.2.5.0.dylib

更新:

在我添加的Mono全局配置文件中

<dllmap dll="csfml-graphics" target="libcsfml-graphics.2.5.0.dylib" />

这将DllNotFoundException消息更改为libcsfml-graphics.2.5.0.dylib。因此,我猜想映射是有效的,但是现在我不确定为什么Mono无法找到DLL。它位于我的项目的bin/Debug文件夹中。

我尝试将.dylib放在名为~/CSFML的文件夹中,并将配置行更改为

<dllmap dll="csfml-graphics" target="~/CSFML/libcsfml-graphics.2.5.0.dylib" />

我认为绝对路径可能会起作用。不幸的是,这仍然给出了DllNotFoundException,但现在这则消息显示了~/CSFML/libcsfml-graphics.2.5.0.dylib ...

更新2:

我尝试按照this tutorial的方法在Mac上设置SFML.Net。我执行了使用InstallNameToolGUI更改.dylib的ID的步骤。我从@rpath/libcsfml-graphics.2.5.0.dylib更改为libcsfml-graphics.2.5.0.dylib

我应注意,我已将Mono配置文件中的DLL映射还原回

<dllmap dll="csfml-graphics" target="libcsfml-graphics.2.5.0.dylib" />

仍然DllNotFoundException和消息发送给libcsfml-graphics.2.5.0.dylib

0 个答案:

没有答案
相关问题