Win 7上的Mono开发环境64位gmcs hello.cs -pkg:gtk-sharp-2.0无法找到文件

时间:2012-05-17 04:57:56

标签: windows mono gtk#

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

我访问了此网站,按照http://www.mono-project.com/Mono_Basics

的说明操作

我打开了mono命令提示符并编译并运行了控制台hello world

然后我尝试使用

编译窗口化的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

我该如何解决这个问题?

这与cannot compile hello.cs for gtk# using mono command prompt中的问题类似,但没有回答。

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

3 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:6)

我已经发现在Windows 7上工作,其中Mono已作为“Program Files”的子目录安装,它是在C的根目录中创建一个文件夹来保存目录链接(例如名为MonoLinks ..注意名称中没有空格)然后,从命令提示符进入此目录并创建一个目录连接点,为其指定一个不包含空格的名称。

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属性文本末尾的路径)。

答案 2 :(得分:3)

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

请注意,虽然我已经提供了32位示例,但没有理由不适用于64位版本,PROGRA~2Program Files (x86)

我找到的解决方法是使用完整路径根据pkg-config返回的信息向gmcs提供单独的-r[eference]参数。尝试:

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" />
...
<{1>}下的

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