【问题标题】:VSTO: Specify Word Document During Debugging DevelopmentVSTO:调试开发时指定Word文档
【发布时间】:2016-06-09 16:58:30
【问题描述】:

在 Visual Studio VSTO 中,如何指定每次运行项目时要打开的文档进行调试?

默认情况下,它总是打开一个空白文档,当然我想针对文档中已经存在的功能进行测试。

【问题讨论】:

    标签: vba vsto


    【解决方案1】:

    我按照 Cor_Blimey 的建议进行了尝试,但它仅在某些情况发生变化时打开指定的内容(还没有弄清楚是什么)。此外,断点至少在实现上层解决方案的 VS2013 中不起作用。
    所以我所做的是每次启动加载项时打开特定的调试/测试文件。
    它工作得很好,断点功能正常,没有加载空白工作簿,并且在下一个调试会话中可用的工作表中的更改。 为了避免在发布的加载项中打开文件,我将它放在 #if DEBUG 中。
    有关该方法的更多信息是here,但必须谨慎使用,如here 所述。

             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 就会一直从调试文件夹打开加载项构建。 您可以通过将办公应用程序作为外部程序运行来避免这种情况,如here 所述。

    【讨论】:

      【解决方案2】:

      您需要使用可以设置为在成功构建时运行的命令行(没有办法只让它在调试时运行(如 F11 中),并且您不能在每个配置的基础上设置它。但是,有一个很好的解决方法可以让它只在调试配置等上做事情。

      基本行为是:

      打开解决方案。打开项目的属性。转到构建事件。在 Post-Build Event Command Line 中输入 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 Post-Build Event 命令行中的限制。

      编辑:

      可以在 http://support.microsoft.com/kb/210565 找到 Word 的开关列表

      您需要指示 Word 执行的操作取决于您正在制作的插件类型:

      如果它是一个标准的 COM 插件,那么只要注册了 DLL 并且您已设置注册表项(或在 Word 插件设置中选择它)打开插件,那么它应该在 Word 打开时打开。

      但是,如果它是一个插件文档,那么程序就不同了 -> 尝试使用命令开关来指示 Word 打开特定的插件文档。

      我更熟悉 Excel COM 插件,因此您必须尝试 Word 插件的特性。但基本原则是使用构建后事件命令行,加上正确的开关和 Winword 参数。

      希望对您有所帮助。

      【讨论】:

      • 这是一个很好的答案,谢谢。但是,虽然它确实打开了一个文档,但我正在处理一个加载项,它会在一个普通窗口中打开该文档,并且仍然会打开一个包含我正在使用的所有控件的第二个空文档。这是我感兴趣的加载项控件的第二个窗口。
      • @ForEachLoop 我想我需要更多关于插件类型的详细信息。它是标准的 COM 插件吗?请参阅上面我编辑的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      • 2015-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多