Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以在一个单独的进程中运行C#代码,而不需要制作控制台应用程序吗?_C#_.net - Fatal编程技术网

我可以在一个单独的进程中运行C#代码,而不需要制作控制台应用程序吗?

我可以在一个单独的进程中运行C#代码,而不需要制作控制台应用程序吗?,c#,.net,C#,.net,我有一个.NET类库,它有一个带有静态方法的类。我希望我的代码在一个单独的进程中运行该静态方法,就像我在一个单独的进程中在一个单独的线程中运行它一样 我知道我可以从Main()内部创建一个单独的控制台应用程序项目来调用static方法,但这对我的部署场景来说并不方便-我不想随身携带一个额外的.exe文件。我知道我可以调用它,但这意味着依赖于Powershell,我宁愿避免使用它 有没有办法只使用.NET在单独的进程中运行代码?也许我可以在运行时为单独的进程创建可执行文件? 你有几个选择。因为您只

我有一个.NET类库,它有一个带有静态方法的类。我希望我的代码在一个单独的进程中运行该静态方法,就像我在一个单独的进程中在一个单独的线程中运行它一样

我知道我可以从
Main()
内部创建一个单独的控制台应用程序项目来调用static方法,但这对我的部署场景来说并不方便-我不想随身携带一个额外的.exe文件。我知道我可以调用它,但这意味着依赖于Powershell,我宁愿避免使用它

有没有办法只使用.NET在单独的进程中运行代码?也许我可以在运行时为单独的进程创建可执行文件?

你有几个选择。因为您只是想防止无限循环,所以只需生成一个新的
线程
(一个新线程,而不是
线程池
一个或
任务
一个)。然后,如果需要终止线程,可以在线程上调用
Abort
。这将在另一个线程中触发
ThreadAbortException

另一个选项是
AppDomain
。然后,调用跨域实际存在的代理对象。代理将使用老式的.NET远程处理来调用实际对象上的方法(因此没有通用传递等,因为您受到基于.NET 1.1的构造的限制)

请注意,上述任何策略都不会保护您免受非托管代码崩溃的影响。由于AppDomains是托管构造,因此无法使用它们中止非托管挂起


如果您真的、真的、真的决定要获得第二个操作系统级进程,您还可以在临时文件中动态生成新的可执行程序集,并在新进程中启动该程序集。请注意,这一点都不微不足道。

您可以对现有应用程序使用命令行选项吗?为什么需要这样做?在初始任务完成后,该进程是否应该继续运行?@Gabe:Nope,我当前的代码是加载到代理中的类库。那么仅仅创建一个新的应用程序域来运行该任务,并在失败时将其删除,是否有意义,与其启动一个全新的进程,不如说它是一个没有对非托管代码调用的线程,那么你就不必去搞乱appdomain——如果线程挂起,你可以杀死它。+1是一个可怕的想法,即动态生成程序集,在一个单独的进程中运行。@Sharptoth这能回答问题吗?嗯,我找到了这个关于如何在运行时构建控制台应用程序的好答案。这一点也不难。