0

我是 Mono 的新手,刚刚安装并正在尝试进行基本设置。

你好.cs:

using System;
using Customz;

public class Hello
{
    public static int Main(string[] args)
    {
        Console.WriteLine( "Hello world! Customz.Beko.Wally = " + Beko.Wally() );
        Console.ReadKey();

        return 0;
    }
}

Customz/Beko.cs:

namespace Customz
{
    public class Beko
    {
        public static int Wally()
        {
             return 15;
        }
    }
}

基本上,我之前在 Unity3D 对 MonoDevelop 和 Visual Studio 的改编中一直在使用 C#。

我记得,在编译时,所有类/命名空间在被请求时都会被自动引用。另外,无论它们在项目目录/子目录中的位置有多深,都会被查找。

编译这个:

mcs "C:\Users\psycketom\Desktop\Mono-C#\test\Hello.cs"

结果是:

C:\Users\psyketom\Desktop\Mono-C#\test\Hello.cs(2,7):错误 CS0246:找不到类型或命名空间名称“Customz”。您是否缺少 using 指令或程序集引用?
编译失败:1 个错误,0 个警告

好吧,我知道我没有遗漏using指令,但我感觉我遗漏了程序集引用。

如何解决此问题并实现类似 Visual Studio 的行为?

更新:

我设法通过发出以下命令来编译目录中的所有内容:

mcs -out:app.exe "C:\Users\psycketom\Desktop\Mono-C#\test\*.cs"

虽然它有效,但它只包含文件夹中的文件,而不考虑文件夹中的任何子文件夹。

如何使它选择所有文件,包括位于子文件夹中的文件?(我开始认为我可能需要一个 bash 脚本或其他东西)

4

1 回答 1

1

您可能希望使用 make、NAnt 或其他构建系统,而不是原始命令行。问题是这样的:

您的项目文件夹有几个文件和几个文件夹。所以你有了

  • Foo.cs
  • 酒吧.cs
  • 商务/Test.cs
  • 商务/Foobar,cs

当您使用mcs -out:app.exe "C:\Users\psycketom\Desktop\Mono-C#\test\*.cs"命令行 shell(不是编译器)时,将为*您扩展通配符。所以,它扩展为

  • Foo.cs
  • 酒吧.cs

大多数 shell 不会递归(可能没有特殊指令?),因为它的成本要高得多,而且通常是出乎意料的行为。

如果您真的决定使用命令行,则必须执行以下操作:

mcs -out:app.exe "C:\Users\psycketom\Desktop\Mono-C#\test*.cs" "C:\Users\psycketom\Desktop\Mono-C#\test\Biz*.cs"

此外,如果您决心使用命令行,您可能想尝试一下 Cygwin 之类的东西。它比使用起来容易一百万倍cmd.exe(而且它似乎与 Mono 配合得很好)

我过去使用的另一个想法:您还可以使用 MonoDevelop 之类的东西来管理解决方案和项目文件,这基本上会将您程序中的所有内容链接起来并告诉编译器需要包含哪些内容。xbuild除此之外,您可以使用MonoDevelop 制作的工具和解决方案文件轻松地从命令行构建

于 2013-01-30T16:28:54.313 回答