2009-12-07 55 views
5

我們目前擁有使用SSIS/C#開發的解決方案。 SSIS包(除其他外)具有使用類庫中開發的邏輯的腳本任務。此功能需要與SSIS包保持獨立。自動部署混合SSIS/DLL解決方案

因爲我們使用的是SSIS包,所以我知道編譯後的DLL需要部署到GAC,然後從腳本任務中引用。但是這給我們造成了一個部署問題。

我們的自動部署工具(正確)會自動增加DLL的版本號,然後發佈到GAC。但是,這會破壞SSIS包,因爲它會根據它們發佈到開發機器GAC的版本號嘗試訪問DLL。

我們唯一的解決方案是獲得編譯的DLL,手動修改SSIS包腳本任務,然後發佈包。

似乎必須有一個更好的方式來做到這一點 - 有沒有人遇到這個問題,並提出更好的解決方案?或者,我們需要改變的方法有一些基本的東西(除了不需要DLL)?

謝謝!

回答

8

好吧,經過大量研究,我從來沒有真正想出一個令人滿意的解決方案。到底是最接近我能得到了一個解決方案,我動態加載我引用:

Dim rsAssembly As Assembly = Assembly.LoadFile("path from config file") 
    Dim rsType As Type = rsAssembly.GetType("class name from config file") 
    Dim obj As Object = Activator.CreateInstance(rsType) 

這讓我創造我所需要的對象(但值得注意的是,任何其他相關的引用也需要動態地加載或GAC的一部分,儘管至少沒有版本號的依賴)。

這裏發佈對未來的求職者,但如果有人想出了更好的東西我還是會很好奇,想知道你是怎麼解決它 - 在這裏後,我會存入你的答案:)

0

您是否確定將那些共享DLL 必須部署到GAC?如果它們與SSIS包位於同一個文件夾中,則無需將它們添加到GAC中即可在框架中發現它們。

有沒有辦法更新您的構建系統以避免版本號更改?如果這些程序集的代碼沒有更改,則不需要更新版本號。

如果您無法避免版本增量,另一種方法是與共享程序集一起構建策略文件,並使用該文件將SSIS程序包「重定向到」每個版本的新版本。

+0

我擁有的信息是SSIS包必須部署到GAC,如果不是,那麼很好 - 但你確定嗎?內部編號 - 我想我們可以,但這個想法讓我有點不舒服。我之前沒有使用過Policy文件,我會去看看它們,謝謝 – Chris 2009-12-07 16:53:25

+0

我還沒有試過一個帶外部依賴項的SSIS包,所以我不確定。應該相當容易地建立你的軟件包的依賴模擬和做一個快速的抽菸測試... – 2009-12-07 17:28:33

+0

嗨戴夫 - 我一直在調查政策文件,因爲他們有關的SSIS解決方案,我真的不明白我會引入一個而不會創建另一個依賴關係。我可能會錯過一些東西,但如果您有任何關於如何將它們用於SSIS包的其他信息,將非常感謝! – Chris 2009-12-07 17:38:05

1

我已經注意到與我們的SSIS/C#混合類似的問題。我們還依賴於外部(對SSIS)dll。在我們的例子中,DLL必須被複制到100/DTS/Binn目錄中,以允許SSIS包在Visual Studio中工作,但是當我們嘗試使用SQL包執行實用程序運行包時,我們得到一個錯誤無法找到該文件。它似乎並不表示版本問題,因爲Visual Studio和Package Execution Utility之間的PATH不同。即使從Visual Studio運行程序包也無需調試。我將研究版本問題,看看也許這是我們系統的核心投訴,但是從內存來看,我認爲這是一個文件未找到的類型錯誤,影響了我們。如果這有所作爲,我們正在使用MSSQL 2008。

+1

在後續步驟中,我能夠通過將DLL複製到主機來成功執行包機器windows \ assembly目錄。顯然這是難以捉摸的GAC位置?無論如何,我們的部署機制並非如此自動化,所以也許這就是爲什麼我們沒有版本問題。一旦我將dll複製到windows \ assembly目錄,包運行完成。 – Travis 2010-02-16 21:06:33

+1

嗨特拉維斯 - 是的,這是GAC的位置,不確定對SQL 2008的限制,但如果它有幫助,我可以爲你確認,在SQL 2005的部署服務器上,DLL必須部署到GAC :( – Chris 2010-07-05 09:34:29