部署自定义SSIS连接管理器失败,失败,出现“ ...未识别为有效的连接管理器类型”

时间:2019-06-11 12:55:49

标签: c# ssis dts ssis-connection-manager

我已经制作了一个自定义的SSIS连接管理器(.NET 4.6.2):

namespace HelloWorldCm
{
    using Microsoft.SqlServer.Dts.Runtime;

    [DtsConnection(
        ConnectionType = "HELLOWORLD",
        DisplayName = "Hello World Connection Manager",
        Description = "Connection manager for Hello World")]
    public class HelloWorldConnectionManager : ConnectionManagerBase
    {
        public override DTSExecResult Validate(IDTSInfoEvents infoEvents)
        {
            return DTSExecResult.Success;
        }
    }
}

我引用的是Microsoft.SQLServer.ManagedDTS版本14.0.0.0,据我理解是SQL Server2017。在本地,如果我在GAC中注册并将其复制到/Connections文件夹中,则可以使用SSIS从Visual Studio中,将连接管理器添加到我的DTSX中。

我可以保存/构建等,并且工作正常-因此我将连接管理器和DTSX复制到运行SQL Server 2017的VM。我再次在GAC中注册并复制到/Connections文件夹。

然后我Import Packages...进入我的Integration Services Catalogs,选择DTSX并按 Next 。然后这告诉我:

  

一个或多个选定的软件包尚未准备就绪。

当我看到为什么时:

  

为连接管理器“ Hello World Connection Manager”指定的连接类型“ HELLOWORLD”不能识别为有效的连接管理器类型。尝试为未知的连接类型创建连接管理器时,将返回此错误。检查连接类型名称中的拼写。

一段时间以来,我一直在努力使其能够正常工作,因此我将列出我尝试过的内容:

  1. 尝试“任何CPU”版本
  2. 尝试过“ x86”版本
  3. 尝试过“ x64”版本
  4. 还尝试了带有虚拟Task的DTSX
  5. 重新启动服务器(在任何部署之后)

我敢肯定其他人。我还完成了一个自定义任务,该任务简单地在日志中打印了“ Hello World”,被编译为“ Any CPU”,以相同的方式(在相同的位置)部署,而SSIS似乎没有在找到它并接受DTSX时遇到任何问题。因此,我有足够的信心“任何CPU”都足够好。

我不确定现在要去哪里-据我所知,我已经有了正确的引用,正确的.NET版本,并且部署与该任务相同。

我将dtsx放在下面,以防其中存在某些东西:

<?xml version="1.0"?>
<DTS:Executable xmlns:DTS="www.microsoft.com/SqlServer/Dts"
  DTS:refId="Package"
  DTS:CreationDate="6/11/2019 1:09:07 PM"
  DTS:CreationName="Microsoft.Package"
  DTS:CreatorComputerName="CHRIS"
  DTS:CreatorName="CHRIS\cskar"
  DTS:DTSID="{0F2D59A1-461B-46ED-8765-75484C06253C}"
  DTS:ExecutableType="Microsoft.Package"
  DTS:LastModifiedProductVersion="15.0.1100.123"
  DTS:LocaleID="2057"
  DTS:ObjectName="Package1"
  DTS:PackageType="5"
  DTS:VersionBuild="1"
  DTS:VersionGUID="{E688A11B-234E-4F39-991E-BAA0A37642E6}">
  <DTS:Property
    DTS:Name="PackageFormatVersion">8</DTS:Property>
  <DTS:ConnectionManagers>
    <DTS:ConnectionManager
      DTS:refId="Package.ConnectionManagers[Hello World Connection Manager]"
      DTS:CreationName="HELLOWORLD"
      DTS:DTSID="{9E82E067-2A0A-4C9C-931D-FD59FD159B5C}"
      DTS:ObjectName="Hello World Connection Manager">
      <DTS:ObjectData>
        <InnerObject>
          <TargetServerVersion
            Type="3"
            Value="150" />
        </InnerObject>
      </DTS:ObjectData>
    </DTS:ConnectionManager>
  </DTS:ConnectionManagers>
  <DTS:Variables />
  <DTS:Executables />
  <DTS:DesignTimeProperties><![CDATA[<?xml version="1.0"?>
<Objects Version="8">
</Objects>]]></DTS:DesignTimeProperties>
</DTS:Executable>

1 个答案:

答案 0 :(得分:4)

SSIS目录用于存储项目,而不是独立的软件包。这是2012年的一项新功能,有助于将相关软件包保持在一起。您可以参数化项目并在软件包之间共享连接管理器。如果要部署到目录中,则需要导入“ .ispac”文件,或者可以在Visual Studio中右键单击并按“ Deploy”。

在项目部署模型中时,不能将单个“ .dtsx”程序包视为独立程序包。由于上述新功能,因此仅在项目中有意义。

将独立程序包部署到MSDB是旧模型,并且得到了维护,因此我们不必立即将所有程序包都迁移到目录中。

Deploy Integration Services (SSIS) Projects and Packages