我可以在一个单独的进程中运行C#代码,而不需要制作控制台应用程序吗?
我有一个.NET类库,它有一个带有静态方法的类。我希望我的代码在一个单独的进程中运行该静态方法,就像我在一个单独的进程中在一个单独的线程中运行它一样 我知道我可以从我可以在一个单独的进程中运行C#代码,而不需要制作控制台应用程序吗?,c#,.net,C#,.net,我有一个.NET类库,它有一个带有静态方法的类。我希望我的代码在一个单独的进程中运行该静态方法,就像我在一个单独的进程中在一个单独的线程中运行它一样 我知道我可以从Main()内部创建一个单独的控制台应用程序项目来调用static方法,但这对我的部署场景来说并不方便-我不想随身携带一个额外的.exe文件。我知道我可以调用它,但这意味着依赖于Powershell,我宁愿避免使用它 有没有办法只使用.NET在单独的进程中运行代码?也许我可以在运行时为单独的进程创建可执行文件? 你有几个选择。因为您只
Main()
内部创建一个单独的控制台应用程序项目来调用static方法,但这对我的部署场景来说并不方便-我不想随身携带一个额外的.exe文件。我知道我可以调用它,但这意味着依赖于Powershell,我宁愿避免使用它
有没有办法只使用.NET在单独的进程中运行代码?也许我可以在运行时为单独的进程创建可执行文件?
你有几个选择。因为您只是想防止无限循环,所以只需生成一个新的线程
(一个新线程,而不是线程池
一个或任务
一个)。然后,如果需要终止线程,可以在线程上调用Abort
。这将在另一个线程中触发ThreadAbortException
另一个选项是AppDomain
。然后,调用跨域实际存在的代理对象。代理将使用老式的.NET远程处理来调用实际对象上的方法(因此没有通用传递等,因为您受到基于.NET 1.1的构造的限制)
请注意,上述任何策略都不会保护您免受非托管代码崩溃的影响。由于AppDomains是托管构造,因此无法使用它们中止非托管挂起
如果您真的、真的、真的决定要获得第二个操作系统级进程,您还可以在临时文件中动态生成新的可执行程序集,并在新进程中启动该程序集。请注意,这一点都不微不足道。您可以对现有应用程序使用命令行选项吗?为什么需要这样做?在初始任务完成后,该进程是否应该继续运行?@Gabe:Nope,我当前的代码是加载到代理中的类库。那么仅仅创建一个新的应用程序域来运行该任务,并在失败时将其删除,是否有意义,与其启动一个全新的进程,不如说它是一个没有对非托管代码调用的线程,那么你就不必去搞乱appdomain——如果线程挂起,你可以杀死它。+1是一个可怕的想法,即动态生成程序集,在一个单独的进程中运行。@Sharptoth这能回答问题吗?嗯,我找到了这个关于如何在运行时构建控制台应用程序的好答案。这一点也不难。