首页 > 解决方案 > 部署自定义 SSIS 连接管理器失败,并显示“...未被识别为有效的连接管理器类型”

问题描述

我制作了一个自定义 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 Server 2017。在本地,如果我在 GAC 中注册它并复制到我的/Connections文件夹,我可以在 Visual Studio 中使用 SSIS,并将连接管理器添加到我的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. 也用虚拟任务尝试了 DTSX
  5. 重新启动服务器(在任何部署之后)

我确定其他人。我还做的是创建一个自定义任务,它只是将“Hello World”打印到日志中,它被编译为“任何 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>

标签: c#ssisdtsssis-connection-manager

解决方案


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

在项目部署模型中,单个“.dtsx”包不能被视为独立包。由于上述新功能,它仅作为项目的一部分才有意义。

将独立包部署到 MSDB 是遗留模型并得到维护,因此我们不必立即将所有包迁移到目录中。

部署集成服务 (SSIS) 项目和包


推荐阅读