如何以编程方式将自定义组件添加到Visual Studio工具箱?

时间:2010-12-20 15:14:17

标签: c# ide ssis

我正在为我们编写的自定义SSIS组件创建安装程序。我想自动添加自定义组件,而不是要求用户手动添加它。

我正在尝试使用此代码执行此操作:

public void AddToolboxItem(string toolboxTabName, string toolBoxItemName, string toolBoxItemPath) {
  Type dteReference;
  EnvDTE.ToolBox toolBox;
  EnvDTE80.ToolBoxItem2 addedToolBoxItem;

  // Get a reference to the visual studio development environment.
  dteReference = Type.GetTypeFromProgID("VisualStudio.DTE.9.0");

  if(dteReference != null) {
    // Get a reference to the toolbox of the development environment.
    EnvDTE80.DTE2 dte = (EnvDTE80.DTE2)Activator.CreateInstance(dteReference);
    toolBox = (EnvDTE.ToolBox)dte.Windows.Item("{B1E99781-AB81-11D0-B683-00AA00A3EE26}").Object;

    // Loop through all tab pages to find the toolbox tab page that was specified
    // in the toolboxTabName parameter.
    foreach (EnvDTE80.ToolBoxTab2 toolBoxTab in toolBox.ToolBoxTabs) {

      // Is this the right toolbox?
      if(string.Compare(toolBoxTab.Name, toolboxTabName, true) == 0) {

        // First check if the component is not already in the toolbox:
        bool found = false;
        foreach(EnvDTE80.ToolBoxItem2 toolBoxItem in toolBoxTab.ToolBoxItems) {
          if (string.Compare(toolBoxItem.Name, toolBoxItemName, true) == 0) {
            found = true;
            break;
          }
        }

        // The toolbox item is not in the toolbox tab, add it:
        if (!found) {
          addedToolBoxItem = (EnvDTE80.ToolBoxItem2)toolBoxTab.ToolBoxItems.Add(
            toolBoxItemName,
            toolBoxItemPath,
            EnvDTE.vsToolBoxItemFormat.vsToolBoxItemFormatDotNETComponent);
        }
        break;
      }
    }
  }
}

我可以获得对“数据流转换”工具箱选项卡的引用,但添加项目会失败,没有异常或错误。

我用参数调用此函数:

  • toolboxTabName =“数据流转换”
  • toolBoxItemName =“特殊测试组件”
  • toolBoxItemPath =“c:\ Program Files \ Microsoft SQL Server \ 100 \ DTS \ PipelineComponents \ mdTest.dll”

作为一个完整性检查,我尝试使用vsToolBoxItemFormatDotNETComponent枚举作为Add()的第三个参数。这会导致Add返回有效对象(即成功),但新项目不会出现在工具箱中。我怀疑可能需要进行某种“保存”操作(即使我让Add()正常工作)。

有没有办法以编程方式将SSIS组件添加到 工具箱?

1 个答案:

答案 0 :(得分:3)

同样的问题也可以在MSDN论坛中找到,并且MVP,主持人已在那里回答了这个问题。我正在粘贴MSDN论坛中提供的答案的链接,以便其他人在这个问题上磕磕绊绊可以知道答案是什么。

Programmatically Add an SSIS Component to the Toolbox (social.msdn.microsoft.com)