c# - 使用不同文件夹中的 DLL 运行 mono .exe

标签 c# dll mono gmcs dmcs

我使用适用于 Mac 的 dmcs 可执行文件和以下命令行程序编译了 test.cs 文件(它引用了第三方库):

dmcs /out:program.exe test.cs /target:exe /reference:/Users/kevin/path/to/bin/Debug/project.dll 

编译没有问题(不包括/reference 参数导致问题)。这在当前目录中创建了一个 program.exe 可执行文件。当我尝试像这样运行它时:

mono program.exe

我收到以下错误:

Unhandled Exception:
System.IO.FileNotFoundException: Could not load file or assembly 'project, Version=3.4.1.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies.

我想出解决这个问题的唯一方法是将 project.dll 文件复制到包含 program.exe 文件的目录中。一旦我将 project.dll 复制到同一目录中,程序就可以正确运行。

是否有额外的参数可以传递给 mono 以指定不同程序目录中的 DLL?或者,是否有一个标志可以传递给 dmcs 以使其将 DLL 直接编译为二进制文件?

最佳答案

你可以使用app.config中的probing元素来实现你想要的

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <probing privatePath="bin;bin2\subbin;bin3"/>
      </assemblyBinding>
   </runtime>
</configuration>

将 privatePath 设置为所需的任何目录。 http://msdn.microsoft.com/en-us/library/823z9h8w(v=vs.80).aspx

但是,除非您指定子目录,否则我强烈建议您不要这样做。 如果您真的不想将程序集放在同一目录中,请考虑按照 Uwe Keim 的建议进行链接或使用 GAC。

链接:http://www.mono-project.com/Linker

GAC:http://www.mono-project.com/Assemblies_and_the_GAC

关于c# - 使用不同文件夹中的 DLL 运行 mono .exe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14029396/

相关文章:

c# - 使用 Azure Function V3,如何将现有的 Ilogger 注入(inject)到新的类文件中?

c++ - 我应该在我的库中使用线程吗?

c++ - 如果在 DLL 项目中使用类中的重载运算符,它们是否需要 __declspec(dllexport)?

c# - 为什么 Mono 源代码大部分是 C#?

c# - 使用 XAML 和 C# 为 Windows Phone 8 应用构建自定义进度条

c# - 在 LINQ 查询中使用 Expression<Func<>>

.net - 应用程序在模拟器中运行,但在部署中给出 'could not resolve error'

mono - 让 MonoDevelop 尊重 smcs.rsp

c# - Delphi 5 可以使用 C# .Net 库吗?

c++ - 未解析的外部符号 _declspec(dllimport)