VSX:自定义包的项目类型,以模仿“调试>>开始操作>>启动外部程序”

时间:2009-11-05 16:03:22

标签: c# visual-studio-2008 vsx vs-extensibility project-types

我有一个基于VSX包(2008+)中的C#类库项目类型的自定义项目类型。对于这个项目类型,即使输出是一个类库,我希望能够通过按F5(等)来调试这个应用程序。我有一个预构建的可执行文件,它将一个程序集路径作为命令行参数并加载它以进行工作台测试。

我可以通过使用项目的“调试>>开始操作>>启动外部程序”手动模拟此行为,方法是提供可执行文件的路径并提供输出dll的相对路径为命令行参数。但这是太多的设置。我希望项目类型的包代码能够自动获取活动配置的程序集和工作台可执行文件的安装位置。

最糟糕的情况是,在每次成功构建之后,该项目的属性页面将以编程方式使用正确的值进行更新。我不是特别喜欢这个解决方案,因为它似乎很乱,似乎很容易失去同步并将这些潜在的错误暴露给用户。

我能想象的最佳解决方案涉及拦截Start Debugger事件(仅适用于此项目类型),然后才能解决“具有类库的输出类型的项目无法直接启动”并改为执行工作台(调试器)附上当然)。我不知道VSX是否暴露了必要的部件。

我会支付这个简单的(?)包(以及一些其他要求,主要是项目级菜单项,已经部分实现)由有经验的人编写,但我没有找到任何专门的顾问在VSX包中。欢迎提出建议。

我采取了错误的做法吗?我假设我需要一个包而不是一个加载项。

1 个答案:

答案 0 :(得分:3)

根据您的说明,听起来您没有自定义项目类型,而是自定义project template。 (如果您有自己的自定义编程语言,通常只有自己的项目类型。)

假设是这种情况,我认为你应该能够create your own IWizard implementation设置项目以启动你的主机可执行文件等...在项目创建时(即用户完成新的后)项目对话框)。

例如,您可以在IWizard的ProjectFinishedGenerating实现中执行以下操作:

public void ProjectFinishedGenerating(Project project)
{
  foreach (Configuration config in project.ConfigurationManager)
  {
    config.Properties.Item("StartAction").Value = 1; //Launch external program
    config.Properties.Item("StartProgram").Value = <pathToYourEXE>;
    config.Properties.Item("StartArguments").Value = <argumentsToYourExe>;
  }
}