部署自定义 SSIS 连接管理器失败并显示“...未被识别为有效的连接管理器类型”

Deploying custom SSIS connection manager failing with '...is not recognized as a valid connection manager type'

我制作了自定义 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 复制到我的 VM 运行 SQL Server 2017。我再次在 GAC 中注册并复制到 /Connections 文件夹。

然后我 Import Packages... 进入我的 Integration Services Catalogs、select DTSX 并按 下一步。这然后告诉我:

One or more selected packages are not ready.

当我看到原因时:

The connection type "HELLOWORLD" specified for connection manager "Hello World Connection Manager" is not recognized as a valid connection manager type. This error is returned when an attempt is made to create a connection manager for an unknown connection type. Check the spelling in the connection type name.

我已经尝试让它工作很长一段时间了,所以我将列出我尝试过的内容:

  1. 已尝试 'Any CPU' 版本
  2. 已尝试 'x86' 版本
  3. 已尝试 'x64' 版本
  4. 也用虚拟任务尝试了 DTSX
  5. 重新启动服务器(任何部署后)

我确定其他人。我还做的是创建一个自定义任务,它只是将 'Hello World' 打印到日志中,它被编译为 'Any CPU',以相同的方式部署(到相同的位置)而 SSIS 没有似乎在找到它和接受 DTSX 时遇到任何问题。所以我有理由相信 'Any 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>

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

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

将 stand-along 包部署到 MSDB 是旧模型并得到维护,因此我们不必立即将所有包迁移到目录。

Deploy Integration Services (SSIS) Projects and Packages