1

用 C# 编写的 exe 文件,我需要将复杂的返回值返回到另一个 C# 项目

这是我的代码:

class Program
{
    private class MyObject
    {
        private int num;

        public int Num
        {
            get
            {
                return (this.num);
            }
            set
            {
                this.num = value;
            }
        }

        public MyObject(int num)
        {
            this.Num = num;
        }

    }

    [STAThread]
    public static MyObject Main(string[] args)
    {
        return new MyObject(5);
    }
}

这给了我以下错误: ...\ConsoleApplication1.exe' 不包含适合入口点的静态'Main' 方法。

我试过玩它,但我没有成功让它返回一个复杂的值。

4

2 回答 2

7

您不能从作为Main流程入口点的方法执行此操作。

如果您正在编写直接从其他代码调用的代码,那么几乎可以肯定的是,您应该构建一个类库项目。您可以将一个应用程序的引用添加到另一个应用程序,但这并不常见(至少在单元测试之外)。如果你想这样做,你应该只调用一个不同的方法而不是Main. (您可以在一个类中以这种方式声明一个Main方法,并使用不同的类作为“正常”入口点,但这似乎毫无意义地复杂。)

于 2012-08-29T20:37:47.063 回答
0

如前所述,如果您将 exe 作为独立的可执行文件调用,则Main必须运行并且您得到的只是传统的进程输入/输出。

但是,如果您确实需要,也可以将 exe 作为库引用。

如果这是您的 exe 的代码:

public class MyObject
{
    private int num;

    public int Num
    {
        get
        {
           return (this.num);
        }
        set
        {
           this.num = value;
        }
    }

    public MyObject(int num)
    {
        this.Num = num;
    }    
}

public class Program
{
    public static MyObject DoWork(int num)
    {
        return new MyObject(num);
    }

    [STAThread]
    public static int Main(string[] args)
    {
        DoWork(5);

        return 0;
    }
}

从另一个 exe 或 dll(假设您已经引用了第一个 exe),您可以像这样调用代码:

MyObject obj = Program.DoWork(8)

不过,这是一种非常不寻常的方法。如果您有在多个地方定义了您需要的丰富类/方法的库,那么您真的应该将它们放在一个 dll 中。

于 2012-08-29T21:02:19.700 回答