单声道二进制文件无法在子目录中找到DLL

时间:2014-09-16 18:23:03

标签: c# .net mono

我在Ubuntu上使用Mono的mcs。我有一个Monogame程序,必须在名为“libs”的子目录中找到Monogame库。它编译得很好,但是当涉及到运行时它会给我一个错误,说它无法找到它。

  

未处理的例外情况:   System.IO.FileNotFoundException:无法加载文件或程序集“MonoGame.Framework,Version = 3.1.2.0,Culture = neutral,PublicKeyToken = null”或其依赖项之一。   文件名:'MonoGame.Framework,Version = 3.1.2.0,Culture = neutral,PublicKeyToken = null'   [错误]致命的未处理的异常:System.IO.FileNotFoundException:无法加载文件或程序集“MonoGame.Framework,Version = 3.1.2.0,Culture = neutral,PublicKeyToken = null”或其依赖项之一。   文件名:'MonoGame.Framework,Version = 3.1.2.0,Culture = neutral,PublicKeyToken = null'

我的编译器标志如下:

mcs -r:libs/MonoGame.Framework.dll -target:winexe -out:main.exe *.cs

甚至没有来自编译器的警告,但它无法运行。我已经尝试了很多这些标志的变体,我找不到静态编译的选项(我真的不想)。 当库位于同一目录中时,它运行正常,但在子目录中它不起作用。我尝试了一些假设的解决方案,例如“AppDomain.CurrentDomain”和“Environment.SetEnvironmentVariable”,但这样做并没有用,老实说这是个坏主意。

1 个答案:

答案 0 :(得分:1)

子目录不会成为搜索路径的一部分。如果您必须将其放在子目录中,我建议您使用specifies a private search path

的应用程序配置文件解决此问题
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="libs" />
    </assemblyBinding>
  </runtime>
</configuration>