是否有简单的c#代码示例可以从外部调用带有公共修饰符的Main()

本文关键字:Main 代码 简单 是否 外部调用 | 更新日期: 2023-09-27 18:18:59

引自本网站(点击):

Main在类或结构内部声明。Main必须是静态的,它不应该是公共的

这意味着Main方法可以是公共的。

现在考虑以下两个项目:

项目1:HelloWorld

using static System.Console;
namespace HelloWorld
{
    class Program
    {
        public static void Main()
        {
            WriteLine("Hello World");
        }
    }
}

我将public修饰符赋值给Main。然后我将其编译成一个名为HelloWorld.exe的应用程序。

项目2:Invoker

namespace Invoker
{
    class Program
    {
        static void Main()
        {
            // I want to invoke Main in HelloWorld.exe here.
            // How to do it?
        }
    }
}

这个项目尝试调用HelloWorld.exe中定义的Main

<标题>

如果不使用Process, Invoker.exe如何调用在HelloWorld.exe中定义的公共Main ?这个问题用来找到一个从外部调用public Main的例子。这就是为什么我不想使用Process

是否有简单的c#代码示例可以从外部调用带有公共修饰符的Main()

Main不应该是公共的,因为它不应该被程序集中的任何其他方法调用。只有CLR才能在应用程序启动时调用它。访问说明符与应用于CLR管理的程序集的方式(如果有的话)不同。

如果您希望它是公共的;但这意味着任何其他应用程序都可以在没有反射的情况下引用它。

这就是运行时所做的;只需开始查找具有各种签名的名为"Main"的静态方法,然后调用它找到的第一个静态方法。可能是这样的:

foreach(Type type in assembly.GetTypes())
{
    foreach(MethodInfo methodInfo in type.GetMethods(BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public))
    {
        if (methodInfo.Name == "Main" /*TODO: && methodInfo.Parameters is valid*/)
        {
            methodInfo.Invoke(null, new object[0]);
        }
    }
}