VS2015 - SSIS自定义组件 - 未显示的定制表单,而是获得高级编辑器

时间:2016-02-12 01:23:28

标签: c# sql-server ssis visual-studio-2015

我试图在VS2015中为SSIS开发自定义源组件。在努力让组件显示在SSIS工具箱中之后,我设法得到了它,但是当点击组件而不是显示定制表单时,它直接进入高级编辑器。我完全按照Microsoft文档中的描述实现了该类:

https://msdn.microsoft.com/en-us/library/ms136029.aspx

但它仍然没有显示。

我已经使用了

namespace CustomImporter
{
[DtsPipelineComponent(
    DisplayName = "Custom importer",
    Description = "Custom Importer",
    IconResource = "CustomImporter.ico",
    UITypeName = "CustomImporter.CustomImporterUI, CustomImporter.CustomImporter, Version=1.1.0.0, Culture=neutral, PublicKeyToken=9b0a5b72a437255d",
    ComponentType = ComponentType.SourceAdapter)
]

public class CustomImporter : Microsoft.SqlServer.Dts.Pipeline.PipelineComponent
{
//code to implement the class
}

然后在表单类中:

using System;
using System.Windows.Forms;
using Microsoft.SqlServer.Dts.Runtime;
using Microsoft.SqlServer.Dts.Pipeline.Design;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;

namespace CustomImporter
{
    class CustomImporterUI : IDtsComponentUI
    {

        #region Members

            IDTSComponentMetaData100 metaData;
            IServiceProvider serviceProvider;

        #endregion

        #region IDtsComponentUI Member

        bool IDtsComponentUI.Edit(IWin32Window parentWindow, Variables variables, Connections connections)
        {
            frmMain editor = new frmMain(metaData, serviceProvider, variables, connections);

            DialogResult result = editor.ShowDialog(parentWindow);

            if (result == DialogResult.OK)
                return true;

            return false;
        }

        void IDtsComponentUI.Help(IWin32Window parentWindow) {}

        void IDtsComponentUI.Initialize(IDTSComponentMetaData100 dtsComponentMetadata, IServiceProvider serviceProvider)
        {
            this.metaData = dtsComponentMetadata;
            this.serviceProvider = serviceProvider;
        }

        void IDtsComponentUI.New(IWin32Window parentWindow){}

        void IDtsComponentUI.Delete(IWin32Window parentWindow){}

        public void Initialize(IDTSComponentMetaData100 dtsComponentMetadata, IServiceProvider serviceProvider)
        {
            // Store the component metadata.
            this.metaData = dtsComponentMetadata;
        }

        #endregion

    }
}

有什么明显看起来不对吗?我不是C#的专家,所以我真的不知道指定UITypeName参数的DtsPipeline代码应该如何。在Microsoft参考链接中,它与其他类名或程序集名称不匹配,但我确保当我将组件注册到GAC或卸载它时,PublicKeyToken与我看到的匹配在命令提示符窗口中,它不可能。我知道这非常繁琐,但我无法在任何地方看到任何文档来显示表单。

我已在GAC中注册了dll并将dll复制到以下文件夹: C:\ Program Files \ Microsoft SQL Server \ 130 \ DTS \ PipelineComponents C:\ Program Files(x86)\ Microsoft SQL Server \ 130 \ DTS \ PipelineComponents

它出现在SSIS工具箱中。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

我认为你的UITypeName属性是错误的。它应该是

"namespace.classThatInheritsFromIDtsComponentUI, AssemblyName"

UITypeName = "CustomImporter.CustomImporterUI, CustomImporter, Version=1.1.0.0, Culture=neutral, PublicKeyToken=9b0a5b72a437255d"

答案 1 :(得分:0)

我也遇到过这个问题。在将我的头撞在桌子上两天之后,我注意到,在构建项目时,VS列出了关于CS1762和{{Embed Interop Types属性的一些警告(代码Microsoft.SqlServer.DTSPipelineWrap)。 1}} UI项目中的程序集引用。

前几天,我posted an answer针对另一个问题处理了这些引用的Microsoft.SQLServer.DTSRuntimeWrap属性,解决方法是将其值设置为Embed Interop Types。因此我尝试在这里应用它,并且令人惊讶地它解决了这个问题。