使用DLL在另一个文件夹中运行mono .exe

Kev*_*rke 7 c# dll mono gmcs dmcs

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

dmcs /out:program.exe test.cs /target:exe /reference:/Users/kevin/path/to/bin/Debug/project.dll 
Run Code Online (Sandbox Code Playgroud)

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

mono program.exe
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

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.
Run Code Online (Sandbox Code Playgroud)

我能解决这个问题的唯一方法是将project.dll文件复制到包含该program.exe文件的目录中.复制project.dll到同一目录后,程序运行正常.

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

Tim*_*hyP 3

您可以使用 app.config 中的探测元素来实现您想要的

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <probing privatePath="bin;bin2\subbin;bin3"/>
      </assemblyBinding>
   </runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)

您将 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