【问题标题】:Mono binary can't find DLLs in subdirectoryMono 二进制文件在子目录中找不到 DLL
【发布时间】:2014-09-16 18:23:02
【问题描述】:

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

未处理的异常: System.IO.FileNotFoundException:无法加载文件或程序集“MonoGame.Framework,Version=3.1.2.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。 文件名:'MonoGame.Framework,版本=3.1.2.0,文化=中性,PublicKeyToken=null' [错误] 致命的未处理异常:System.IO.FileNotFoundException:无法加载文件或程序集“MonoGame.Framework,版本=3.1.2.0,文化=中性,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”,但没有奏效,老实说这是个坏主意。

【问题讨论】:

    标签: c# .net mono


    【解决方案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>
    

    【讨论】:

    • 我该怎么办?我可以在 IDE 之外使用它吗?我正在使用命令行。
    • 应用程序配置文件与 IDE 没有任何关系。它只是一个名为yourapp.exe.config的文件
    • 做到了!非常感谢。男孩肯定不像其他语言那样直截了当。
    猜你喜欢
    • 2015-06-13
    • 2013-10-05
    • 1970-01-01
    • 2019-04-29
    • 2017-04-26
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多