我编写了这段代码来实现一个通过 HTTP 获取文件的 SSIS 控制流任务:
using System;
using Microsoft.SqlServer.Dts.Runtime;
namespace HttpTask
{
[DtsTask(
DisplayName = "HTTP Task",
TaskContact = "Iain Elder",
RequiredProductLevel = DTSProductLevel.None
)]
public class HttpTask : Task
{
public string LocalPath {get; set;}
public string Connection {get; set;}
public bool OverwriteDestination {get; set;}
public DTSExecResult Execute(Connections connections,
VariableDispenser dispenser, IDTSComponentEvents events,
IDTSLogging log, object transaction)
{
HttpClientConnection http = AcquireHttpConnection(connections);
http.DownloadFile(this.LocalPath, this.OverwriteDestination);
return DTSExecResult.Success;
}
private HttpClientConnection AcquireHttpConnection(Connections connections)
{
ConnectionManager cm = connections[this.Connection];
object nativeConnection = cm.AcquireConnection(null);
return new HttpClientConnection(nativeConnection);
}
}
}
在 Visual Studio 中,我使用此构建后脚本构建和部署我的任务,以将包复制到全局程序集缓存:
"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\gacutil.exe" /if "$(TargetPath)"
copy $(TargetFileName) "C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Tasks"
使用 Business Intelligence Development Studio 时,我可以在工具箱中看到该任务:
当我将任务拖到设计窗口时,我看到了这个错误:
该任务不会出现在设计画布上。
我在这里做错了什么?
编辑: Siva 建议我应该用一个强名称签署程序集。我按照Benny Austin 博客上的程序集签名指南的第 1 步和第 2 步进行操作。我没有遵循其他步骤,因为我的构建后脚本为我部署了组件。
在 Visual Studio 项目属性中,我转到 Signing 选项卡并为程序集创建一个新的强名称密钥文件:
我保存设置并重建包。构建后脚本部署新包。
我仍然得到完全相同的错误。