调试“插件”应用程序的一种无痛方法?

时间:2014-02-06 14:54:33

标签: c# visual-studio

我即将开始基于“插件”架构开发桌面应用程序(WPF),并将使用MEF(及其DirectoryCatalog)来发现和加载插件程序集。我们将开发许多插件,所以将它们保存在单独的VS解决方案而不是膨胀“核心”应用程序解决方案似乎是明智的,但是我只怀疑单独的独立解决方案,我怀疑这将进行调试有点棘手。如果有所作为,我正在使用VS2013。

我假设我仍然能够在“核心”应用程序调用该插件中的方法的情况下进入插件?而且我猜测,一旦在那里,我将能够在那些已被“访问”的源代码文件中设置断点?但是,如果我想在不同的源代码文件中添加一个断点,那么在单步执行时没有被访问的文件?我该如何打开该文件?在一个解决方案中,我可以通过解决方案资源管理器打开它,但不是(我猜)它在一个单独的程序集中。

我试图预先解决我可能遇到的这种多解决方案问题,并想知道VS是否有任何聪明的功能来简化这些内容。拥有单独的解决方案还意味着首先编译我想要测试的插件解决方案,然后编译并运行“核心”应用程序解决方案。虽然只需点击几下鼠标,但是(再次)是否有任何可以帮助的VS功能?

4 个答案:

答案 0 :(得分:3)

这是一种常见的情况,并不是很棘手。

在插件的项目属性中,转到Debug -> Start Action并将Start external program设置为核心应用程序的可执行文件。

这样,您只需编译一次核心应用程序(可能使用只构建所有内容的构建脚本),调试插件将启动核心应用程序并附带调试器,您可以调试插件(只要您的核心应用程序加载插件程序集)。

另请注意,您可以从正在运行的应用程序中取消调试器,切换到另一个Visual Studio实例并打开另一个解决方案,然后再次附加到正在运行的应用程序。这可以派上用场调试您的插件,并希望在核心应用程序中设置或使用现有的断点。

只要Visual Studio能够找到调试符号(* .pdb文件),就可以单步调试代码。调试插件时你的核心应用程序也没问题。

答案 1 :(得分:1)

我认为有两种方法可以做到这一点。

更舒适的选择:

<强> 1。您可以将外部解决方案添加到核心解决方案中。

Walkthrough: Adding an existing Visual Studio solution to another solution

通过这样做,您可以组织解决方案以引用代码,并且仍然可以将每个插件解决方案同时分开。

您只需从您当前想要处理的核心解决方案中引用这些插件解决方案。此外,使用这种方法,您可以像处理普通项目一样组织其他解决方案,并根据自己的喜好移动虚拟解决方案文件夹,直到您拥有最合适的文件夹结构。

引用文章:

  

这种方法的好处在于,不仅是所有的方法   项目现在在一个解决方案,但在任何时候,你可以打开   单独的解决方案,而不影响&#34;主人&#34;解决方案和副   反之亦然。

可以打开和编辑参考解决方案中的文件,就像您的&#34;普通&#34;中的任何其他文件一样。项目,当然,您也可以像在任何其他代码文件中一样设置断点。

通过这种方式,您可以同时执行edityour代码,我个人认为这比切换和附加到多个流程更方便。

<强> 2。添加PDB文件。

将DLL与您要调试的那些插件的相应PDB放入一个文件夹,并配置您的核心应用程序以使用DirectoryCatalog的该文件夹。这使您可以进入插件代码,但您将无法编辑它们。

答案 2 :(得分:0)

@Andrew 关于调试,只要你将带有程序集的.pdb文件放在用作DirectoryCatalog的目录中就不应该是一个问题。

关于在Core之前构建插件解决方案 - 因为每个解决方案都有1个构建文件,您应该检查是否可以在.bat文件中编写msbuild命令以使其一个接一个地执行。

答案 3 :(得分:0)

除了上述所有建议之外,另一种调试方法是将您的插件解决方案附加到正在运行的核心流程。 Attach to Running Processes with the Visual Studio Debugger