C# 调试->;的用途是什么;在VisualStudio中启动外部程序

C# 调试->;的用途是什么;在VisualStudio中启动外部程序,c#,debugging,visual-studio-debugging,C#,Debugging,Visual Studio Debugging,我在Visual Studio 2017中创建了两个解决方案: 第一个控制台应用程序Example1 第二个是类库ClassLibrary1 ClassLibrary1只包含一个文件MyLib.cs: namespace ClassLibrary1 { public class MyLib { public string Foo() { return "Bla"; } } } 在第一个解决方案(

我在Visual Studio 2017中创建了两个解决方案:

  • 第一个控制台应用程序
    Example1
  • 第二个是类库
    ClassLibrary1
ClassLibrary1只包含一个文件
MyLib.cs

namespace ClassLibrary1
{
    public class MyLib
    {
        public string Foo()
        {
            return "Bla";
        }
    }
}
在第一个解决方案(带有Example1控制台应用程序的解决方案)中,我添加了现有项目->ClassLibrary1

我将ClassLibrary1配置为启动项目,并设置Debug->Start external program,如图所示:

现在您只需启动项目(在我的例子中是ClassLibrary1),调试就可以了(我在返回“Bla”中设置了断点)。发生的情况是Example1.exe调用ClassLibrary.MyLib文件


我是否正确理解了
Debug->Start external program
的用法,或者是否有其他用法?

如果您有外部启动代码的东西,您通常会使用它。比如,如果您正在开发一个DLL,而项目之外的其他进程启动了它

例如,您可以为
Thingy.exe
开发一个插件
ThingyPlugin
。然后在这里指定
Thingy.exe
作为加载插件的方法

如果您没有外部流程,那么最好使用
Start Project

我是否正确理解调试->启动外部程序的用法,或者是否有其他用法

不可以。通常您会使用启动项目,除非您有一个需要启动的外部程序来调试您的项目


我自己也曾在很多情况下使用过此功能,主要是在为其他软件开发外接程序时,例如实际上是Autodesk Revit插件的类库、不受支持的Microsoft Office版本等。

当需要执行的程序不是正在开发的程序时,使用此功能。可能是您正在开发插件,或者是用Visual Studio不支持的编程语言编写的,比如Delphi,或者类似的东西。@LasseVågsætherKarlsen,例如Delphi调用你的DLL,然后你可以在Visual Studio中调试你的DLL。@你也可以打开你的DLL项目,启动另一个应用程序,然后在Visual Studio中单击“调试\附加到进程”,然后选择正在运行的应用程序并放置一个在您的代码中设置断点,当调用该方法时它将中断。@确切地说,我们是在工作中这样做的,我们还开发了一个Delphi应用程序,以及Delphi应用程序通过托管.NET运行时加载的大量.NET代码。通过配置VisualStudio来启动Delphi生成的.exe文件,我们可以设置断点并正常调试.NET代码。我们无法从VisualStudio调试到Delphi代码中,但我们始终可以切换到该部分的Delphi IDE。是的,Revit和Solidworks加载项是很好的示例。我经常使用它们。它们在启动时加载,您无法调试软件本身。您必须附加到进程或设置外部程序command@Franck所以,附加到现有进程与设置外部程序是相同的。唯一的区别是VisualStudio在设置外部程序时启动该程序used@broadband不同之处在于,start external将启动使用dll的EXE,然后将找到进程并自动附加到它。如果按stop,它应该停止EXE(一些不稳定的程序很挑剔,无法关闭,但这不是重点)。如果您确实需要运行3次使用DLL的EXE,那么您需要附加到其中一个,您对调试感兴趣,并且当您想要切换时,您需要分离并附加到另一个。这不会停止应用程序的运行。这将是两种模式的要点。