Visual studio 在用C编写热插拔dll时,Visual Studio的好工作流是什么?

Visual studio 在用C编写热插拔dll时,Visual Studio的好工作流是什么?,visual-studio,visual-c++,dll,hotswap,Visual Studio,Visual C++,Dll,Hotswap,我有一个VisualStudio解决方案,带有一个可执行文件和一个热插拔dll(插件)。可执行文件在构建dll的目录中运行文件系统监视器,当生成新版本时,它将重新加载并继续使用它。这里最关键的一点是,在重新加载dll之间,可执行文件的状态会保持不变 现在,如果我在不调试(Ctrl-F5)的情况下运行程序,然后在dll代码发生更改时进行构建,那么这一切都可以正常工作。dll被重新加载,新功能被执行,这是一种魅力。问题是我想调试dll的时候 不幸的是,VisualStudio不允许我在调试时生成。因

我有一个VisualStudio解决方案,带有一个可执行文件和一个热插拔dll(插件)。可执行文件在构建dll的目录中运行文件系统监视器,当生成新版本时,它将重新加载并继续使用它。这里最关键的一点是,在重新加载dll之间,可执行文件的状态会保持不变

现在,如果我在不调试(Ctrl-F5)的情况下运行程序,然后在dll代码发生更改时进行构建,那么这一切都可以正常工作。dll被重新加载,新功能被执行,这是一种魅力。问题是我想调试dll的时候

不幸的是,VisualStudio不允许我在调试时生成。因此,唯一能起作用的是,如果我在不调试的情况下运行,然后在进行更改并希望调试dll时,定期将调试器与进程连接并分离。这相当麻烦。特别是当我想调试plugin init函数时。在这种情况下,我必须在调用可执行文件之前在其中添加一个中断(比如一个消息框:“Plugin loaded,但未调用
init
。如果您想在
init
中添加断点,请立即附加到进程”)

是否有VisualStudio工作流,在该工作流中我可以跳过不断手动重新附加到流程


(例如,带有显式目标选择的Xcode确实允许我使用dream工作流,在该工作流中,一切都正常工作,我可以在调试时构建.dylib,而无需显式地将调试器重新连接到进程。
init
断点正常工作,等等)

我完全掌握了您描述的工作流程。包括文件系统监视程序,以捕获源代码中的更改,然后使用CL.exe在MSV外部编译调试DLL。MSVS自动允许我设置断点并调试可热交换DLL代码。我使用的是MSVS-2015。最初遇到的唯一问题是MSVS-2015锁定了e.pdb文件,从未解锁。我已经解决了:。现在系统完全按照您描述的那样工作。手动重新附加调试器。您所说的-Visual Studio不允许在调试时生成是什么意思?@jbeuler,在断点处停止,更改代码,按ctrl-shift-b。会弹出一个提示,告诉您需要停止调试我假设您在这里谈论的是热插拔DLL代码。Ctrl-shift-b构建解决方案。热插拔源文件可以是MSVS解决方案的一部分(在解决方案资源管理器中可见),但它们不是由visual studio构建的(如标记的项类型:不参与构建)。MSVS热键ctrl-shift-b自然无法在此处工作。当我要提交代码库的可热插拔部分中的更改时,我只需在visual studio中按ctrl-S(保存)以保存源文件。文件系统事件到达,应用程序从外部调用CL.exe来编译更改的文件并重新加载DLL。