单声道自动加载或自动命名空间/类引用

时间:2013-01-30 15:36:00

标签: c# compilation mono

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

hello.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 \ psycketom \ 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脚本或其他东西)

1 个答案:

答案 0 :(得分:1)

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

您的项目文件夹包含几个文件和几个文件夹。你有

  • Foo.cs
  • Bar.cs
  • 商务/ test.cs中
  • 商务/ Foobar的,CS

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

  • Foo.cs
  • Bar.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制作的解决方案文件从命令行轻松构建