2011-10-21 107 views
1

我正在構建自定義的SSIS任務。在這個任務中,我運行了一些腳本。這些位於項目/子文件夾腳本中。獲取自定義任務的項目目錄SSIS

現在的問題是,當我調試從BIDS我的任務:

Directory.GetCurrentDirectory(); 

回報:C:\Program Files (x86)\Microsoft Visual 9.0\Common7

但是,如果我從Visual Studio(與DTEXEC)運行/調試,我得到:

C:\Users\nwadike\Documents\Visual Studio 2008\Projects\BloombergRequest\BloombergRequest\bin 

現在,如果我使用:System.Reflection.Assembly.GetCallingAssembly().Location, 我得到:C:\Windows\assembly\GAC_MSIL\BloombergRequest\versionNum\BBG.dll是否我從SSIS或Visual Studio進行調試...

基本上我正在尋找如何獲得項目\腳本\的相對路徑....這是怎麼可能的?

回答

2

有SSIS中沒有辦法得到在Visual Studio項目特定文件夾中的相對路徑 - 這是有道理的,因爲整個Visual Studio項目通常不會得到部署與包裹。而且,正如您所指出的那樣,「當前目錄」的概念沒有幫助,因爲它基於可執行文件的運行位置,而不是源代碼的位置。

但是,有一種(簡單的)簡單的解決方法。

  1. 一個屬性添加到自定義任務的絕對路徑腳本文件夾中。
  2. 在使用自定義任務SSIS包,該屬性設置爲一個包變量的值,並配置包得到的配置文件變量(.dtsconfig)
  3. 或者:
    • 在你Visual Studio解決方案,添加另一個C#DLL項目。它不需要任何代碼。相反,在項目的「生成事件」屬性頁中,調用在步驟2中生成.dtsconfig文件的腳本,並將宏$(SolutionDir)/project/scripts作爲參數傳遞;
    • 配置值手動設置爲絕對路徑到腳本文件夾
-1

使用:

Environment.CurrentDirectory 
+0

不幸的是,當我從BIDS調試這將返回: 'C:\ Program Files文件(x86)的\微軟的Visual 9.0 \ Common7 \ IDE' ... 並從VS: 'C:\ Users \ nwadike \ Documents \ Visual Studio 2008 \ Projects \ BloombergRequest \ BloombergRequest \ bin \ Debug' ... – nche