3

我下载了 Mono 并将其安装在 Win 7 64bit 上

我去了这个网站按照说明http://www.mono-project.com/Mono_Basics

我打开单声道命令提示符并编译并运行控制台 hello world

然后我尝试用

gmcs hello.cs -pkg:gtk-sharp-2.0 

我明白了

C:\Code\NoControl\Mono>gmcs hello.cs -pkg:gtk-sharp-2.0
error CS0006: Metadata file `C:/PROGRA\~2/MONO-2\~1.8/lib/mono/gtk-sharp-2.0/pango-sharp.dll' could not be found
error CS0006: Metadata file `C:/PROGRA\~2/MONO-2\~1.8/lib/mono/gtk-sharp-2.0/atk-sharp.dll' could not be found
error CS0006: Metadata file `C:/PROGRA\~2/MONO-2\~1.8/lib/mono/gtk-sharp-2.0/gdk-sharp.dll' could not be found
error CS0006: Metadata file `C:/PROGRA\~2/MONO-2\~1.8/lib/mono/gtk-sharp-2.0/gtk-sharp.dll' could not be found
error CS0006: Metadata file `C:/PROGRA\~2/MONO-2\~1.8/lib/mono/gtk-sharp-2.0/glib-sharp.dll' could not be found
Compilation failed: 5 error(s), 0 warnings

我该如何解决?

这与此处无法使用未回答的单命令提示符为 gtk# 编译 hello.cs 的问题类似。

  • -pkg 在 Windows 上工作吗?
  • 我需要下载一些额外的东西吗?
  • 缩写路径提到 ~1.8/ 是否应该说 ~10.8 表示我的单声道版本是 2.10.8?
4

3 回答 3

9

这些是指出问题根本原因的有用答案。但是,到目前为止,最简单的解决方案是将 Mono 安装到名称中没有空格的文件夹中。安装时,只需选择“C:\SDK\Mono”之类的内容。问题解决了,不需要任何时髦的解决方法。

于 2012-10-20T00:54:39.930 回答
6

我发现在 Windows 7 上工作的解决方法是 Mono 已安装为“程序文件”的子目录,即在 C: 的根目录中创建一个文件夹来保存目录链接(例如称为 MonoLinks .. NB 没有空间在名称中),然后从命令提示符进入该目录并创建一个目录连接,为其命名不包含空格。

C:\MonoLinks>mklink /J Mono "C:\Program Files\Mono-2.10.8"

这具有创建名为 Mono 的可遍历目录(链接)的效果,该目录不仅会显示 Mono 安装的内容,而且程序可以访问而无需转换为其原始路径名。这可以很容易地在 C: 的根目录中创建,但是如果需要,在那里有一个通用文件夹 (MonoLinks) 允许在其中创建其他链接,而不会弄乱 C: 的根目录。

接下来的事情(无论如何都必须完成,因为在安装期间未更新 PATH 环境变量)是更新 PATH 环境变量,使其指向安装中的 bin 目录。在控制面板的用户帐户中,选择更改我的环境变量并编辑要包含的 PATH 变量C:\MonoLinks\Mono\bin(即在 PATH 属性文本的末尾添加分号和路径)。

于 2012-10-02T15:34:04.677 回答
3

-pkg在 Windows 上似乎有缺陷。在干净的命令提示符下,如果Program Files\Mono\bin您输入 PATH,gmcs将会阻塞语法并给出关于Files\Mono\...的错误,指示与路径名中的空格相关的错误。如果您PROGRA~1\MONO\bin使用 PATH 或使用 Mono 命令提示符,它将阻塞并给出有关PROGRA\~1/MONO/...的错误,指示与波浪号(等)相关的错误并转义它们。

请注意,尽管我给出了 32 位示例,但没有理由不将其应用于 64 位版本,PROGRA~2并且Program Files (x86).

我发现的一种解决方法是-r[eference]使用完整路径根据 pkg-config 返回的信息为 gmcs 提供单个参数。尝试:

gmcs hello.cs -r:C:/PROGRA~2/MONO-2~1.8/lib/mono/gtk-sharp-2.0/gtk-sharp.dll
              -r:C:/PROGRA~2/MONO-2~1.8/lib/mono/gtk-sharp-2.0/gdk-sharp.dll
              ...

或者更好:

gmcs hello.cs -r:"C:\Program Files (x86)\Mono-2.10.8\lib\mono\..." -r:"..."

(即完整路径)

如果您使用的是 NAnt,请尝试删除<pkg-references/>并添加:

<include name="C:\Program Files\Mono\lib\mono\gtk-sharp-2.0\gtk-sharp.dll" />
<include name="C:\Program Files\Mono\lib\mono\gtk-sharp-2.0\gdk-sharp.dll" />
...

<references/>

请原谅我使用不一致和不完整的路径名;此答案旨在作为指南,而不是复制粘贴解决方案。

于 2012-06-13T18:41:24.020 回答