我试图在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工具箱中。
非常感谢任何帮助。
答案 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
。因此我尝试在这里应用它,并且令人惊讶地它解决了这个问题。