web-dev-qa-db-ja.com

SSISスクリプトタスクのデバッグ-ブレークポイントは有効になっていますがヒットしません

私はSSISパッケージに取り組んでいます。パッケージには、スクリプト(C#言語)タスクがあります。スクリプトタスクをデバッグする必要があります。ブレークポイントを設定します。スクリプトエディター(Visual Studio)のスクリプトとSSISパッケージエディターのタスクはどちらも、ブレークポイントを赤色で表示します-ブレークポイントが有効になっていることを意味します。ただし、パッケージをデバッグするとき、ブレークポイントはヒットしません。

ブレークポイントには条件が設定されていないため、パッケージが実行されるたびにブレークポイントに達すると予想されます。

Windows 2003 R2 64ビットSP2でVisual Studio 2008を使用しています。

25
HappyTown

さらなる調査と試行錯誤の後、SSISパッケージは、64ビットマシンでのデバッグ時にスクリプトタスクのブレークポイントを無視することがわかりました。修正するには-

  1. ソリューションエクスプローラーに移動します
  2. SSISプロジェクトノードを右クリックして、[プロパティ]
  3. [構成プロパティ]> [デバッグ]> [デバッグオプション]> [設定Run64BitRunTimeからFalseへ。

SSIS Project configuration settings

この変更を行った後、ブレークポイントは魔法のようにヒットします。

26
HappyTown

ここで提供されたすべての答えを試してみましたが、成功しませんでした(VS2015を使用)。さらに検索した結果、私はこれを見つけました 実際には答えである質問 これは、新しいC#機能/構文がデバッガーを正しく起動しないことを示していました。

彼らの例(そして私のもの)では、文字列補間を使用するとブレークポイントにヒットしませんでした。

交換

$"{someVariable} - {someOtherVariable}"

string.Format("{0} - {1}", someVariable, someOtherVariable);

私のためにトリックをしました。

19
PTD

更新:皆さん、再びブレークポイントを設定する機能を失いました (MSへのリクエスト)
以前の修正は以下のとおりです。
今、デバッグの代わりにロギングとトレースを使用しています。


C#の新機能(C#4.0以降)は、SSISスクリプトタスクのデバッグを終了させることで非難されています。

ブレークポイント機能を返すには、次のことを行います。

  1. C#の新機能を削除する
  2. スクリプトタスクを1回正常に実行します。つまりクラッシュなし。
  3. スクリプトタスクからVstaプロジェクトを再度開き、ブレークポイントをそこに配置します。

最後に、スクリプトタスクに赤い円を表示する必要があります。
(VS 2017でテスト済み。)

enter image description here

。デバッグは、「パッケージの実行」ではなく「タスクの実行」のみを使用しても機能します。

C#の新機能の削除

C#の新機能を削除するには、2つの方法をお勧めします。

最初、VstaプロジェクトのプロパティをC#4.0に制限します(移行されたパッケージはこれをサポートしない場合があります)。

  1. Dobuleは、「スクリプトタスク」をクリックして「スクリプトタスクエディター」を開きます。
  2. [スクリプトの編集...]ボタンをクリックして、Visual Studioを開きます。
  3. 「ソリューションエクスプローラー」でプロジェクトを選択し、キーボードのF4キーをクリックします。
  4. 「C#言語レベル」で開いた「プロパティ」ウィンドウで「C#4.0」を選択します
  5. プロジェクトをビルドし、コンパイルエラーを修正

Secondly、古い/移行されたパッケージのVstaプロジェクトには、上記の「C#言語レベル」プロパティが表示されない場合があります。
したがって、Visual Studio 2010の偽のプロジェクトにコードを配置し、そこでコンパイルできます。

正常に1回実行

C#を修正したら、スクリプトタスクを1回正常に実行する必要があります。
実際の実行を防ぐために、Main()メソッドの先頭にreturnステートメントを配置することができます。
Sorry、これは常に機能するとは限りません。なぜかはわかりませんが、最初にC#を修正する必要があります。
少なくとも動作中のスクリプトタスクを取得し、昔ながらの方法でデバッグできます(ログはDts.Events...、例外など)

TL; DR

C#の新機能により、スクリプトタスクが成功完了ステータスでサイレントに失敗するように強制された場合でも、深刻なケースがあったようです。

例として、スクリプトタスクに次を追加します。

string Bug { get; } // Only getter properties.
//...
var str = $"Now is {DateTime.Now}"; // String Interpolation in C#
//...
var dummy = val?.ToUpper(); // ?. and ?[] null-conditional Operators

この完全ではないリストの回避策:

string Bug { get; set; }
//...
var str = string.Format("Now is {0}", DateTime.Now);
// etc.

また、C#コードをVisual Studio 201で作成します。新しい.NET機能をコンパイルせず、4.0以上の.NET Frameworkバージョンを許可しません。ここまでは順調ですね。

もちろん、このSO質問からの他の答えは私を助けませんでした。

12
it3xl

残念ながら上記の回答が役に立たないSSISパッケージを継承しました。

最終的に、デバッグモードのスクリプトタスクのビルドプロパティには、最適化コードがチェックされていました。私にとっては、Visual Studioがスクリプトデバッグのために起動し、すぐに終了するため、これにチェックが入っていないことを確認してください。

Make sure Optimize code is not ticked

かなりあいまいですが、言及する価値があります。

5
Jeff

System.Diagnostics.Debugger classを使用して、プログラムでブレークポイントを追加します。

System.Diagnostics.Debugger.Launch();
System.Diagnostics.Debugger.Break();

デバッガが接続されているかどうかを確認できます。

    if (System.Diagnostics.Debugger.IsAttached)
        System.Diagnostics.Debugger.Break();

次の手順に従ってください:

  1. プロジェクトまたはソリューションを開いたままにします。
  2. アプリを実行してブレークポイントをヒットします。
  3. Just-In-Time Debuggerでプロジェクトを選択します。 Just-In-Time Debugger snapshot
5
Shadmehr

私の場合、これらのソリューションはどれも機能しませんでした。私はついに、リシャーパーが犯人であることを知りました。アンインストールすると、チャームのように機能し始めました。

4
Sumanth

最近、同じ問題に遭遇しました。私たちにとっての解決策は、スクリプトタスクプロジェクトが、x86に設定されたプラットフォームターゲットで実行するようにマークされていることを確認することでした。

  1. スクリプトタスクを編集する
  2. プロジェクトをクリックして、プロパティを選択します
  3. プラットフォームターゲットをx86に設定する場合に選択します
3
Ben Watt

私の場合、C#6のすべての機能を削除する必要がありました。文字列補間、null条件演算子(_?._、?()、_?[]_)、および式本体メンバー(_=>_)(あなたの場合はもっとあるかもしれません)。それらすべてを確認できます here 。もちろん、C#7機能にも同じことが当てはまります。

他の回答からの32/64ビットの変更は役に立たなかったので、それらをロールバックし、デバッグは正常に機能し続けました。

3
Andrew

Jeffの提案に加えて、プラットフォームターゲットを "x86"に変更します(スクリプトのプロパティの[ビルド]タブで。これにより、ついに64ビットシステムでデバッグできるようになりました。

2
Kurt S

私の経験では、それは重要ではありません:

  • run64BitRuntimeがtrueまたはfalseの場合
  • パッケージの32または64ビットバージョンをビルドする場合

しかし、非常に重要なものがあり、他の回答では言及されていません:パッケージ全体を実行する必要があります。タスクまたはコンテナを実行すると、ブレークポイントは無視されます。

64ビットマシンでVisual Studio 2013を使用しています。

0
JotaBe

スクリプトコンポーネントは1つしかなく、ブレークポイントにヒットしませんでした(ソース/ターゲットを必要とせずにCRMを実行していました)。単純なfetchXMLでSourceコンポーネントを追加しようとしました(必要ない場合でも)。それでうまくいきました! :-)

0

ブレークポイントは、私が何をしたとしてもヒットすることを拒否しました。例外のスローを使用して、問題をデバッグして修正することになりました。私が抱えていた問題を修正すると、ブレークポイントがヒットし始めました!

そのため、私のブレークポイントは、コードでランタイムの問題が発生しなかった場合にのみヒットします...これは奇妙です。

0
creatiive