C# 当调用公共Main成为可能时,为什么我们需要生成另一个进程?
假设我有3个独立的.net核心控制台应用程序项目:C# 当调用公共Main成为可能时,为什么我们需要生成另一个进程?,c#,C#,假设我有3个独立的.net核心控制台应用程序项目:HelloWorld、Consumer和Spawner 假设程序集HelloWorld来自第三方。我知道它的Main方法是公开的 HelloWorld: namespace HelloWorld { public class HelloWorld { public static void Main() { Console.WriteLine("Hello World");
HelloWorld
、Consumer
和Spawner
假设程序集
HelloWorld
来自第三方。我知道它的Main
方法是公开的
HelloWorld:
namespace HelloWorld
{
public class HelloWorld
{
public static void Main()
{
Console.WriteLine("Hello World");
}
}
}
namespace Consumer
{
class Consumer
{
static void Main()
{
HelloWorld.HelloWorld.Main();
}
}
}
namespace Spawner
{
class Spawner
{
static void Main()
{
Process p = new Process();
p.StartInfo.FileName = "HelloWorld.exe";
p.Start();
p.WaitForExit();
}
}
}
消费者:
namespace HelloWorld
{
public class HelloWorld
{
public static void Main()
{
Console.WriteLine("Hello World");
}
}
}
namespace Consumer
{
class Consumer
{
static void Main()
{
HelloWorld.HelloWorld.Main();
}
}
}
namespace Spawner
{
class Spawner
{
static void Main()
{
Process p = new Process();
p.StartInfo.FileName = "HelloWorld.exe";
p.Start();
p.WaitForExit();
}
}
}
产卵器:
namespace HelloWorld
{
public class HelloWorld
{
public static void Main()
{
Console.WriteLine("Hello World");
}
}
}
namespace Consumer
{
class Consumer
{
static void Main()
{
HelloWorld.HelloWorld.Main();
}
}
}
namespace Spawner
{
class Spawner
{
static void Main()
{
Process p = new Process();
p.StartInfo.FileName = "HelloWorld.exe";
p.Start();
p.WaitForExit();
}
}
}
问题
现在我想使用HelloWorld
程序集。
我必须实现哪种方法,像在Consumer
项目中那样调用,还是像在Spawner
项目中那样生成
调用程序集的public Main
和使用进程调用程序集之间有什么区别
我在想为什么我们不总是将Main
公开,以便其他人可以通过两个选项调用它:调用方法或生成新进程。还是我的理解错了?欢迎任何意见 你几乎回答自己,你不需要产生一个单独的过程。您可以从不同的控制台应用程序调用publicMain()
,它将正常工作
然而,如果你遇到这样的情况,你可能会问自己,为什么这些首先是分开的。不同的入口点是保持这些东西彼此独立运行、单独部署等所必需的。最明显的最大区别是,当生成不同的进程时,它会自动完全并行运行。您几乎回答自己,您不需要生成单独的进程。您可以从不同的控制台应用程序调用publicMain()
,它将正常工作
然而,如果你遇到这样的情况,你可能会问自己,为什么这些首先是分开的。不同的入口点是保持这些东西彼此独立运行、单独部署等所必需的。最明显的最大区别是,当生成不同的进程时,它会自动完全并行运行
调用程序集的public Main和使用进程调用程序集之间有什么区别
Consumer.Main
调用HelloWorld.Main
就像调用任何其他方法一样,因此HelloWorld.Main
与Consumer
在相同的进程(和线程等)中运行。您可以向它传递强类型参数,HelloWorld
和Consumer
将共享静态
状态,如果一个部分导致崩溃,两个部分都将停止,等等
Spawner.Main
启动一个单独的进程;看见就像您自己在命令行上调用了HelloWorld
。Spawner
和HelloWorld
之间没有共享状态。进程Spawner
启动甚至不需要用C#或.NET编写
通常:
- 如果
HelloWorld
是一个库,那么编写HelloWorld
的人希望您引用它并从自己的代码中调用它。但是像Main
这样的名称在这种情况下非常罕见;通常有许多方法可以调用来执行不同的操作,它们有更具体的名称、参数、返回类型等
- 如果
HelloWorld
是一个独立的应用程序,那么编写HelloWorld
的人希望您将其作为一个单独的进程调用,包括从可能与调用方不同的技术堆栈调用。(例如,C#可以使用进程
对象启动用许多其他语言编写的程序的进程。)
我在想为什么我们不总是公开Main,允许其他人使用两个选项调用程序集:调用方法或生成新进程
你并不总是想让人们做出选择。也许你的Main
做了其他程序需要的一些基本设置-在这种情况下,你不希望其他人调用你的Main
,作为某个单独程序的一部分,可能设置不同
调用程序集的public Main和使用进程调用程序集之间有什么区别
Consumer.Main
调用HelloWorld.Main
就像调用任何其他方法一样,因此HelloWorld.Main
与Consumer
在相同的进程(和线程等)中运行。您可以向它传递强类型参数,HelloWorld
和Consumer
将共享静态
状态,如果一个部分导致崩溃,两个部分都将停止,等等
Spawner.Main
启动一个单独的进程;看见就像您自己在命令行上调用了HelloWorld
。Spawner
和HelloWorld
之间没有共享状态。进程Spawner
启动甚至不需要用C#或.NET编写
通常:
- 如果
HelloWorld
是一个库,那么编写HelloWorld
的人希望您引用它并从自己的代码中调用它。但是像Main
这样的名称在这种情况下非常罕见;通常有许多方法可以调用来执行不同的操作,它们有更具体的名称、参数、返回类型等
- 如果
HelloWorld
是一个独立的应用程序,那么编写HelloWorld
的人希望您将其作为一个单独的进程调用,包括从可能与调用方不同的技术堆栈调用。(例如,C#可以使用进程
对象启动用许多其他语言编写的程序的进程。)
我在想为什么我们不总是