【发布时间】:2019-10-25 21:50:00
【问题描述】:
我制作了一个自定义 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 并按下一步。然后这告诉我:
一个或多个选定的包尚未准备好。
当我看看为什么我会看到时:
为连接管理器“Hello World Connection Manager”指定的连接类型“HELLOWORLD”未被识别为有效的连接管理器类型。尝试为未知连接类型创建连接管理器时返回此错误。检查连接类型名称中的拼写。
我已经尝试让它工作了很长一段时间,所以我将列出我尝试过的内容:
- 尝试了“任何 CPU”版本
- 尝试了“x86”版本
- 尝试了“x64”版本
- 用虚拟任务也试过 DTSX
- 重新启动服务器(在任何部署之后)
我相信其他人。我还做的是创建一个自定义任务,它只是将“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>
【问题讨论】:
-
这是在项目部署模型还是包部署模型?
-
错误,包部署模型 - 我正在将 .dtsx 文件复制到服务器,然后导入包(或尝试),尽管我可能正在导入项目...
-
目录用于存储项目。所以你会想要导入一个 .ispac 文件。您必须连接到集成服务(而不是数据库引擎)并将您的包导入 MSDB。
-
啊,好的,所以我现在已经将它纳入项目 - 谢谢 - 请随时添加以上内容作为答案 - 但由于我不熟悉 SSIS - 为什么不包的导入不工作吗?如,为什么会出现错误 - 当它将运行包时...?
标签: c# ssis dts ssis-connection-manager