Visual Studio托管过程的目的是什么?


165

使用Visual Studio调试程序时,可以选择Enable the Visual Studio hosting process。此选项的目的是什么?它有什么作用?


88
很难相信这个问题被封闭为“不是一个真正的问题”!托管过程足够真实,知道它的作用对任何.NET程序员都非常重要。就像Visual Studio设置页面中易于获得的任何神秘选项一样。让我们重新打开这个人吧。
汉斯·帕桑

Answers:


85

MSDN库没有提供有关“托管过程”的很好的信息。Eric链接中列出的最后两个功能实际上是该功能引起的问题。您肯定会迟早要遇到另一个问题:它使用另一个app.config文件。活动文件名为yourapp.vshost.exe.config。手动更改文件时,请注意这一点。

它支持的另一个功能在调试应用程序时非常明显,但是Console.Write()产生的输出发生了什么,却没有在任何地方提及。在非控制台模式的应用程序中,它将被重定向到IDE的“输出”窗口。很有用。

术语“托管”是指CLR的功能,可以被“托管”。自定义CLR主机的示例是SQL Server和ASP.NET。托管允许在开始之前配置CLR。一种主要用途是配置主要AppDomain并设置自定义安全策略。这正是托管过程正在做的事情。

此问题提供了一个自定义CLR主机的好例子

长话短说:在调试模式下,您运行的是自定义版本的CLR,可以改善调试体验。


4
我有在每个新项目中禁用此功能的习惯。使用C ++ / CLI WinForms Designer时遇到了奇怪的问题,禁用此功能时不会发生。
surfen

这不太可能相关,C ++ IDE不使用托管过程,也不在设计模式下使用。
汉斯·帕桑

2
另外,在Microsoft网站(msdn.microsoft.com/en-us/library/ms242202.aspx)上,它指出启用了部分信任调试(不知道是什么意思)和我经常使用的设计时表达式评估。在立即窗口中计算表达式。但是,托管确实存在其所提到的问题。
杰伊·伊曼

5
托管过程倾向于使我想从另一个运行的Visual Studio副本写入的DLL保持加载状态。终止托管进程,甚至退出并重新启动有问题的VS都无济于事,因为新启动的托管进程会再次加载DLL。这就是我通常禁用它的原因。
gpvos

我观察到Console.WriteLine即使我Enable the Visual Studio hosting process从Windows窗体项目的属性窗口中禁用了该选项,日志也会在输出窗口中打印。不知道为什么。
RBT


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.