【问题标题】:How to programmatically start the second project from the "StartUp" project in the same C# solution?如何以编程方式从同一 C# 解决方案中的“StartUp”项目启动第二个项目?
【发布时间】:2014-05-07 19:11:41
【问题描述】:

我有两个项目的 C# VS 2012 解决方案:ProjectA 和 ProjectB。为了简单起见,这两个项目都是控制台应用程序。

ProjectA 需要首先启动,因此它被设置为解决方案的“启动项目”。当我在调试器下使用 F5 运行 ProjectA 时,它需要执行一些操作,之后它应该在同一调试器下启动 ProjectB。所以如果我在 ProjectB 的第一行设置断点,调试器应该会中断。

有什么办法可以做到吗?目前我使用 Process.Start("path_to_projectB.exe") 但需要用类似“Process.StartUnderSameDebugger("path_to_projectB.exe")”的东西替换。我想使用为 ProjectB 启动 ProjectA 的同一个 VS 调试器实例。

请注意,我不想在 Visual Studio 中使用“启动多个项目”选项。如果我这样做,两个控制台应用程序将同时启动(这是不需要的)并在同一个调试器下(这是想要的)。第一个进程必须先执行一些操作才能启动第二个进程,这就是我不能使用这种方法的原因。

当我稍后停止调试器时,两个进程(来自 ProjectA 和 ProjectB 的控制台应用程序)都应该关闭。

【问题讨论】:

  • 为什么不直接运行项目A,让它执行准备操作,然后手动调试项目B?
  • 因为这个方案涉及到进程间通信。基本上 ProjectA 是 ProjectB 的看门狗,它们不是独立的。在开发中,我需要两个项目在同一个调试器下运行,但 ProjectA 应该是启动 ProjectB 的那个。
  • 在 ProjectB 中有一个 Console.ReadLine() 或类似的东西。当 ProjectA 启动 ProjectB 时,附加调试器,然后按 Enter 继续。
  • 您需要编写模拟进程间通信的单元测试。然后,您剩下要做的就是证明通信本身是有效的。
  • @Darryl Braaten,我和整个团队都希望自动化,而不是每次都手动附加调试器。

标签: c# debugging visual-studio-2012 process visual-studio-debugging


【解决方案1】:

您始终可以在第一个项目启动后手动右键单击调试第二个项目 - 两者都将在调试器停止时结束。

【讨论】:

    【解决方案2】:

    这些选项

    1. 创建一个模拟给定测试场景的单元测试。
    2. 创建引用项目或将目标 CS 文件包含为 linked filesAdd Existing Item -> Add(选择下拉 add as link))的项目 C,并复制需要测试的过程。李>

    【讨论】:

      【解决方案3】:

      Visual Studio 团队发布了一个 Visual Studio 扩展,允许自动将子进程附加到当前调试器:Introducing the Child Process Debugging Power Tool

      因此,您可以使用Process.StartProjectA 启动您的ProjectB,它会自动将调试器附加到第二个进程。

      它在 Gallery 上适用于 Visual Studio 2013 及更高版本。

      您还可以查看我的回答 here,了解如何将 current 调试器附加到您可能启动的任何进程。请注意,它不会像 Visual Studio 扩展那样直接,因为调试器将在进程启动后附加。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多