簡體   English   中英

SSIS 腳本任務獲取“調用目標已拋出異常”。 使用第 3 方 dll 運行時

[英]SSIS Script Task getting "Exception has been thrown by the target of an invocation." when running with 3rd party dll

我有一個流程已部署到生產 SQL Server SSIS 目錄已有幾年了,並且每天都運行良好。 最近進行了更新並進行了部署。 事實證明,源代碼管理沒有最新的工作修訂版(可能是我的錯!)。 我通過在 SSMS 中使用 GUI 恢復到最新的工作版本,現在,每當我運行包時,我都會在 C# 腳本任務中收到“調用目標拋出異常”。

腳本任務本身不執行,所以在里面添加斷點什么也不做。 SSIS 試圖執行出錯的任務。 該腳本引用了 BouncyCastle 的加密庫。 當我注釋掉所有引用庫的代碼時,腳本任務成功執行。 我什至可以保留在 using 語句中。

我嘗試刪除引用並重新添加它無濟於事。

將版本重新設置在目錄上通常就足夠了,所以聽起來除了 SSIS 包之外,其他東西可能已經改變了。 例如,如果 dll 版本已更改並且相應的版本未在 GAC 中注冊

如果您在 pre-execute 方法中有一個斷點並且它仍然無法到達它,那么它很有可能在 BouncyCastle 導入時失敗。 這些導入通常僅在 dll 已在 GAC 中注冊時才有效。

或者,您可以修改腳本以從文件夾手動加載dll,而不是使用反射在 GAC 中查找它

您可以將以下方法添加到腳本中並更新路徑。 請注意,此程序集需要存在於已部署服務器上的該路徑中。 此代碼將告訴腳本在運行時從該文件夾加載 DLL

static ScriptMain()
{
    AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
}

static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
    if (args.Name.Contains("BouncyCastle.Crypto"))
    {
        string path = "C:\\SO\\bouncycastle\\";
        return System.Reflection.Assembly.LoadFile(System.IO.Path.Combine(path, "BouncyCastle.Crypto.dll"));
    }
    return null;
}

DLL 位置

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM