8

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

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 编译成二进制文件吗?

4

1 回答 1

3

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

<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

于 2012-12-25T09:46:13.980 回答