如何告诉Mono在哪里找到一个库?

3

我试图在mono中使用Gnu.Getopt。根据其他类似问题的答案,我已经做了以下操作:

% gacutil -i .../gnu.getopt.net-0.9.1/Gnu.Getopt/bin/Release/Gnu.Getopt.dll

可行的方案:

% gacutil -l | grep Gnu.Getopt
Gnu.Getopt, Version=0.9.1.24287, Culture=neutral, PublicKeyToken=d014b4ccdc53511a

但是 Mono 找不到它:
% grep Gnu Program.cs
using Gnu.Getopt;
% mcs Program.cs
Program.cs(4,7): error CS0246: The type or namespace name `Gnu' could not be found. Are you missing an assembly reference?
Compilation failed: 1 error(s), 0 warnings

将DLL的显式路径传递给程序可以正常运行:
% mcs -r:.../gnu.getopt.net-0.9.1/Gnu.Getopt/bin/Release/Gnu.Getopt.dll Program.cs
%

我错过了什么?

更新

我注意到 /usr/lib/mono/4.5 中的符号链接指向 /usr/lib/mono/gac 中的所有内容(例如 System.Core.dll -> ../gac/System.Core/4.0.0.0__b77a5c561934e089/System.Core.dll)。我插入了对 Gnu.Getopt.dll 的符号链接,但症状仍然存在。

3个回答

1

在发布到mono列表并进一步搜索后,答案似乎是“不要使用Gnu.Getopt”;相反,请使用Ndesk.Options,参见C#的GetOpt库


1
如果您正在寻找一种通用的方式来使用命令行选项解析器,可以在/usr/lib/mono-source-libs中找到名为Options.cs的文件(将/usr更改为您安装mono的前缀)。 要引用系统上安装的文件的最新版本,您可以在编译器中使用-pkg:mono-options命令行选项(-pkgmcs编译器选项,允许引用系统包)。 或者,您可以将文件复制到项目中并像任何其他cs文件一样使用它。

0
根据mcs文档,编译时默认引用的程序集只有:
mscorlib.dll
System.dll

微软的CSC编译器有类似的行为,其中一组程序集默认被引用,但其他程序集需要传递给编译器,即使这些程序集在GAC中。


谢谢你的回答。不过,即使给出“-r:Gnu.Getopt”或“-r:Gnu.Getopt.dll”,也会失败。此外,Monodevelop在引用列表中找不到Gnu.Getopt。它列出了/usr/lib/mono/4.5中的所有其他dll文件。 - Scott Deerwester

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接