在 Visual Studio VSTO 中,如何指定每次运行项目进行调试时要打开的文档?
默认情况下,它总是打开一个空白文档,当然我想针对文档中已经存在的功能进行测试。
我按照 Cor_Blimey 的建议进行了尝试,但它只在某些情况发生变化时打开指定的内容(还没有弄清楚是什么)。此外,断点至少在实现上层解决方案的 VS2013 中不起作用。
所以我所做的是每次启动加载项时打开特定的调试/测试文件。
它工作得很好,断点功能正常,没有加载空白工作簿,并且在下一个调试会话中可用的工作表中的更改。为了避免在发布的加载项中打开文件,我将它放在#if DEBUG中。
有关该方法的更多信息在此处,但必须按照此处所述谨慎使用。
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
#if (DEBUG)
this.Application.Workbooks.Open("C:\\Users\\c563368\\Documents\\Visual Studio 2013\\Projects\\...\\debug.xls");
#endif
}
但是有一个缺点,只要你的调试环境(visual studio)正在运行,Office 就会一直从调试文件夹打开加载项构建。您可以通过将办公应用程序作为外部程序运行来避免这种情况,如此处所述。
您需要使用可以设置为在成功构建上运行的命令行(没有办法只让它在调试上运行(如在 F11 中),并且您不能在每个配置的基础上设置它。但是,有一个很好的解决方法,让它只在调试配置等上做事情。
基本行为是:
打开解决方案。打开项目的属性。转到构建事件。在构建后事件命令行中输入 Word 的路径(例如“C:\Program Files (x86)\Microsoft Office\Office14\Winword”)(或者如果它在您的 %Path% 中,则只需 Winword)并传入您要作为参数打开的文档的路径。这将在每次成功构建时打开 Word 和文档(您可以将触发器设置为所有构建,无论是否成功等)
然而,我更喜欢做的是简单地将它指向一个批处理文件,将有关构建事件的详细信息作为参数传递给批处理文件。然后,在批处理文件中,我运行逻辑来决定是否应该启动 Word、打开文档等。
例如,您可以将其指向
$(ProjectDir)buildScript.bat "$(ConfigurationName)"
然后在批处理文件中有类似的东西
if %1=="Debug - Excel" "C:\Program Files (x86)\Microsoft Office\Office14\excel.exe" "%~dp0\testbook.xlsx"
这将在项目目录中运行一个名为 buildScript 的批处理文件。第一个参数(在批处理文件中访问的 %1)将是配置。因此,您可以将批处理文件设置为启动 Word 并将文档作为参数传递,如果配置为“调试”,但如果配置为“发布”则不传递,从而避开 VS2012 构建后事件命令行中的限制。
编辑:
可以在http://support.microsoft.com/kb/210565找到 Word 的开关列表
您需要指示 Word 执行的操作将取决于您正在制作的插件类型:
如果它是一个标准的 COM 插件,那么只要注册了 DLL 并且您已设置注册表项(或在 Word 插件设置中选择它)以打开插件,那么它应该在 Word 打开时打开。
但是,如果它是一个插件文档,那么程序就不同了 -> 尝试使用 commnd 开关来指示 Word 打开特定的插件文档。
我对 Excel COM 插件比较熟悉,因此您必须尝试使用 Word 插件的特性。但基本原则是使用构建后事件命令行,以及 Winword 的正确开关和参数。
希望有帮助。