2

我正在尝试在 linux 上使用 mono 编译我的项目。我的 cmd 看起来像...

gmcs  Pages/UserProfile.cs   Properties/AssemblyInfo.cs   queues.cs   watch_editor.cs Class1.cs -define:USE_SQLITE -r:System -r:System.Collections -r:System.Collections.Generic -r:System.Collections.ObjectModel -r:System.Collections.Specialized -r:System.Configuration

但很长。我得到了输出

error CS0006: cannot find metadata file `System.Collections'
error CS0006: cannot find metadata file `System.Collections.Generic'
error CS0006: cannot find metadata file `System.Collections.ObjectModel'
...

我该如何解决这个问题?

我也尝试了另一种方式(如下),并且在它们的末尾有相同的错误消息和 .dll

gmcs   -define:USE_SQLITE -r:System.dll -r:System.Collections.dll  -r:System.Web.UI.WebControls CommentCenter.cs   cookies.cs   db.cs   Default.aspx.cs 
4

1 回答 1

8

您正在混淆程序集和命名空间。程序集(例如 System.dll)是一个二进制库文件,可以包含多个命名空间中的类型。命名空间可以跨多个程序集拆分,程序集名称不必以任何方式与命名空间匹配。

-r 用于引用程序集。您不需要引用命名空间。

鉴于这些命名空间中的大多数类都在 mscorlib(默认引用)或 System.dll 中,您可能只想

gmcs  Pages/UserProfile.cs   Properties/AssemblyInfo.cs   queues.cs   watch_editor.cs Class1.cs -define:USE_SQLITE -r:System

我强烈建议您使用诸如 MonoDevelop 之类的 IDE。如果您有兴趣,可以查看它生成的编译器命令。

于 2010-05-22T04:17:46.377 回答