2011-10-21 14 views
1

カスタムSSISタスクを構築しています。タスクでは、私はいくつかのスクリプトを実行します。これらはプロジェクト/サブフォルダscripts /にあります。カスタムタスクのプロジェクトディレクトリを取得するSSIS

今、私はBIDSから私のタスクをデバッグするときに問題がある:

Directory.GetCurrentDirectory(); 

リターン:C:\Program Files (x86)\Microsoft Visual 9.0\Common7

しかし、私は(DTExec付き)のVisual Studioから/デバッグを実行する場合、私は得る:

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スタジオからデバッグするかどうかを取得...

基本的に私はプロジェクトへの相対パスを取得する方法を探しています\ scripts \ ....これはどのように可能ですか?

答えて

2

のVisual Studioプロジェクトに特定のフォルダへの相対パスを取得するためのSSIS内に方法はありません - 全体のVisual Studioプロジェクトが正常に展開されませんので、理にかなって、パッケージと一緒に。そして、あなたが指摘したように、 "カレントディレクトリ"という概念は、ソースコードがどこにあるのかにかかわらず、実行可能ファイルの実行元に基づいているので、助けになりません。

しかし、(ソートの)簡単な回避策があります。

  1. のスクリプトフォルダへのパスのカスタムタスクにプロパティを追加します。カスタムタスクを使用してSSISパッケージで
  2. 、パッケージ変数の値にそのプロパティを設定し、設定ファイル(.dtsconfig)からその変数を取得するためにパッケージを設定
  3. 次のいずれかの
    • あなたにVisual Studioソリューションでは、別のC#DLLプロジェクトを追加します。それにコードを入れる必要はありません。代わりに、プロジェクトのビルドイベントプロパティページで、手順2で.dtsconfigファイルを生成し、引数としてマクロ$(SolutionDir)/project/scriptsを渡すスクリプトを呼び出します。 または
    • 手動で私はBIDSからデバッグするとき残念ながら、これは返すスクリプトが
-1

使用:

Environment.CurrentDirectory 
+0

をフォルダへの絶対パスに設定値を設定します。 'C:\プログラムファイル(x86の)\のMicrosoft Visual 9.0 \ Common7 \ IDE' ... VS: 'C:\ Users \ nwadike \ Documents \ Visual Studio 2008 \ Projects \ BloombergRequest \ BloombergRequest \ bin \ Debug' ... – nche

関連する問題