Esri Addin for ArcCatalogをデバッグできません


8

この質問がGIS.SEとStackOverflowのどちらの質問であるかは簡単ではありませんでした。問題はArcCatalogにあると思われるため、GIS.SEを使用します。

ArcCatalog(およびArcMap)用に作成されたアドインがいくつかあります。以前は、ブレークポイントを使用してコードをF5デバッグできましたが、すべてのブレークポイントが非アクティブになり、メッセージ「ブレークポイントは現在ヒットしません」が表示されますこのドキュメントにはシンボルがロードされていません

ここに画像の説明を入力してください

私はスタックオーバーフローからの提案を試しました:

「ブレークポイントは現在ヒットしません。このドキュメントにはシンボルがロードされていません。」

このブレークポイントは現在ヒットしません。ソースコードはオリジナルとは異なります(クリーニング/再構築後も)

ブレークポイントは現在ヒットしません。このドキュメントに読み込まれたシンボルはありません

そしてまた

ArcGIS 10アドインのデバッグ時にブレークポイントを「ヒット」できないのはなぜですか?しかし、これは別の問題のようです。

これはアドイン(dll)なので、スタートアッププロジェクトはありません。他のすべてのバージョンをクレンジングました。のEsriaddinxファイルに微妙な変更をmessage=加えて、変更が行われたことを確認しました-すべて問題なく、古いバージョンはありません。

クレンジング中に、ArcCatalogの%USERPROFILE%\Documents\ArcGIS\AddIns\Desktop10.X\{AddInID}\アドインがArcMapアドインのない場所にコピーされていることに気づきました。pdb ファイルをアドインフォルダーにコピーしようとしましたが、コードがデバッグされておらず、ArcCatalogがコピーに切り替え/リダイレクトしているようです。

ArcCatalogのブレークポイントアドインでデバッグする方法はありますか?ArcMapアドインとスタンドアロンアプリケーションは問題なくデバッグすることに注意してください。

環境:

  • Windows 7 64ビット
  • ArcGis 10.1
  • Visual Studio 2010 Professional(VB.netとC#の両方)

ArcMap 10.3とVisual Studio 2013の組み合わせで同様の問題が発生しました。あなたが言及したのと同じ投稿がすべて見つかりました。実際、ある時点で実際にデバッグしてブレークポイントに到達することができました。しかし、何らかの理由でしばらくして動作を停止し、再び動作させる方法がありませんでした。最後に、プロジェクトのターゲットフレームワークを.Net 4.5から.Net 3.5に戻し、.exe.configのsupportedRuntimeをv2.0.50727に設定しました。それで解決しました。たぶん、ArcCatalogアドインは4.5を使用し、ArcMapは3.5を使用しますか?
Berend、2015

@Berendの可能性です。ターゲットフレームワーク(すべての構成)が.NET Framework 3.5クライアントプロファイルに設定されています...それは4または4クライアントプロファイルですか?このツールは非常に古く、元々はVB6で書かれており、3.5を使用するArcGis 9.3で.netに変換されたため、アドインに変換されたときにフレームワークは変更されませんでした-コンパイルされて正常に実行されたため、変更する必要があります。私は本当にあなたがここで何かをしていると思います-私は他の投稿で見たことがないものです。
Michael Stimson

それは@Berendです!あなたの賞金を集めるための答えとしてそれを書いてください。ターゲットフレームワークを.NET Framework 4 Client Profileに変更したところ、ブレークポイントがアクティブになりました。私は見落としがちな、シンプルだが隠された何かがなければならないことを知っていました ... どうもありがとうございました。これで、このコードを適切にデバッグできます。
Michael Stimson

回答:


2

最初のコメントを回答にア​​ップグレード:

ArcMap 10.3とVisual Studio 2013を組み合わせた場合にも同様の問題がありました。@ michael-miles-stimsonと同じ投稿をすべて見つけました。実際、ある時点で実際にデバッグしてブレークポイントに到達できました。しかし、何らかの理由でしばらくして動作を停止し、再び動作させる方法がありませんでした。

最後に、プロジェクトのターゲットフレームワークを.Net 4.5から.Net 3.5に戻し、.exe.configのsupportedRuntimeをv2.0.50727に設定しました。それで解決しました。

ArcCatalogアドインが4.5およびArcMap one 3.5を使用している場合は、質問で説明されている動作が説明されます。

クライアントバージョンとフルバージョンのどちらを使用しても問題ないと思います。常にフルバージョンを使用する傾向があります。ある時点で、クライアントバージョンにないクラスが欠落しているように見えるためです。


Berendに感謝します。これで問題は完全に修正されました。賞金を褒めてください。
Michael Stimson、2015

1

クレンジング中に、ArcCatalogのアドインが%USERPROFILE%\ Documents \ ArcGIS \ AddIns \ Desktop10.X {AddInID} \にコピーされていることに気付きましたが、ArcMapアドインはありません。

実際には、Arcmapアドインもインストール(またはVisual Studioでのビルド)後にその場所にコピーされます。

この問題を解決するには、次の手順を試してください。

  1. ソリューションを右クリックして[ソリューションのクリーン]を選択し、Visual Studioでソリューション全体をクリーンアップします

  2. arccatalogアドインプロジェクトが他のサードパーティアセンブリに依存している場合、それらのアセンブリの横に.pdbファイル(シンボル)があることを確認してください

  3. ビジュアルスタジオで、ソリューションに他のプロジェクトがあり、arccatalogプロジェクトがそれらに依存している場合は、dllではなくプロジェクト参照を追加します。この画像のように:

ここに画像の説明を入力してください


私はきれいにしました、それは私が最初にしたことの1つでした、他のプロジェクトまたはサードパーティのアセンブリはありません(おそらく、これにはExcelライブラリv12が必要です)... Excelオブジェクトがこの問題を引き起こしていると思いますか?もしそうなら、どうすればそのためのpdbファイルを取得できますか?そのバージョンの古さに関係なく、Microsoftがソースコードを提供することはないと思います。
Michael Stimson、2015

非常に可能です。単にExcelオブジェクトを削除し、クリーンにしてからデバッグを再試行します。
Farid Cheraghi、2015

マイクロソフトのソースコードを共有することはできません。pdbの場合は、それをググってください。
Farid Cheraghi、2015

1
Excel / ArcObjectsをデバッグする必要があります。なんらかの理由で、シートを通過して約Xになり、停止します。ArcGis v10.xはExcelスプレッドシートをサポートしていますが、このコードと関連するシートはArcGis 9.1で作成されており、シートは非準拠です(ヘッダーは行3にあります)。この投稿では、pdbsocial.msdn.microsoft.com/Forums/office/en-US/…を取得する方法を説明したので、試してみましょう。
Michael Stimson、2015

1
明らかに、問題を引き起こしていたのは.NET Frameworkバージョンでした。これは、古いバージョンでゲームをプレイしたくないExcelに関係している可能性があります。多くのMicrosoftアップデートの1つが、.net 3.5でExcel 12オブジェクトを使用する機能を台無しにしている可能性があります。
Michael Stimson、2015

1

わかりました、このプロセスを使用してコードをステップ実行できることを確認しました。 私はこれをArcMapで行っていますが、プロセスはEsri固有のアイテムではなくDLLのデバッグを処理するため、ArcCatalogに適用する必要があると思います。 ArcMap 10.2.2とArcCatalog 10.2.2の両方でこれを確認しました。これはDLLを直接処理するWindowsプロセスであるため、ESRIソフトウェアのバージョンは重要ではありません。

Visual Studioを使用してプロセスアタッチしています。

DLLが別のプログラムで呼び出されたときに、このプロセスを使用してコンパイル済み拡張機能(DLL)をステップ実行できます。

これが私がやっていることです...

Visual Studioで、拡張プロジェクトを開きます。VS 2010 C#Expressで拡張機能を作成しましたが、VS 2013 Ultimateを使用してこれを実行しています。 2010 Expressバージョンのプロセスにアタッチがオプションであるかどうかはわかりません。 見なかったのですが、Express版だったのでどこかに隠されていました。

ESRI製品を開き、アドインをインストールします。次に、VSに戻り、[ プロセスアタッチ ]をクリックして、ESRI製品プロセスを選択します。鉱山はArcMap.exeでした。ここから、Visual Studioはそのデバッガーをプログラムにアタッチし、ユーザーが開いていてブレークポイントが設定されているDLLが実行されると、そこで停止します。これは、Visual Studioでデバッグしている他のプログラムと同様に機能します。それは可能コードが最も可能性が高いので、それほど有用ではない難読化されたものの、ESRI項目の一部にいくつかのデバッグを伸ばします。

プロジェクトのリリースディレクトリからアドインをインストールしたことを確認しました。私の知る限り、ESRIはDLLをそのフォルダーの1つにコピーしませんが、Esriアセンブリ登録ユーティリティを使用してDLLの場所を登録し、システムがESRI製品から参照されたときにDLLの場所を認識できるようにします。

参考:このプロセスを使用して、あるプロジェクトで作成したクラスライブラリを別のプロジェクトで使用されているデバッグします。ESRIアドインは別のプログラムで呼び出されるクラスライブラリ(DLL)なので、同じ理論が適用されます。Visual Studioは別として、他のすべてのWindowsデバッガーがDLLにアタッチできるはずです。

PLEASEこの1にコメントを投稿してください。私はこれがしばらくの間うまくいくだろうと思っていました、そして他の人がこの方法でどのように公平であるかを見るのは非常に興味があります。

編集シンプルなボタンで構成される新しいArcCatalogアドインを作成しました。string stophere = "debugger stopped!";ボタンのクリックイベントのイベントハンドラーに文字列の割り当てを追加しました。ArcCatalogを通じて、プロセスにアタッチする方法の使用を停止しました。プロセスに関するVisual Studio 2010の情報はこちらです。

MSDNには、Visual StudioとWindowsデバッガーのさまざまなメソッドを使用してDLLをデバッグする方法がいくつかあります。私は個人的に、外部プログラムのメソッドを開始するよりも、リモートデバッガーを使用するよりもAttach to Processが優れていると感じています

このメソッドの唯一の欠点は、Visual Studio内から直接デバッグするF5アプローチを失うことです。つまり、コードに変更を加え、更新をインストールし、ArcCatalogを開始して、プロセスにアタッチしてから、ブレークポイントに到達します。ただし、この方法は、あなたが抱えているような問題に遭遇した場合に備えて、かなり良い方法だと思います。このプロセスは少し長くなる可能性がありますが、結果を得るための確実な方法です。


私はVisual Studio 2010 Professionalを使用しています。質問で述べたように、ArcMapとArcCatalog には大きな違いがあります。ArcMapアドインは問題なくデバッグされます。これをCOM(ArcGis 9.3.1)コードとして記述していたときは、問題なく動作しました。実際、それについて考えると、非常に古いEsri拡張機能(9.3.1)もなくなっていることを確認する必要があります。ArcCatalog.exe.configの編集に関するコメントで何を言っていましたか。最初の半ダースの行を見せてください。機能がほとんどない(msgboxで十分なはずです)ArcCatalogアドインを作成してみて、デバッグできるかどうかを確認してください。
Michael Stimson

@ MichaelMiles-Stimson ...そのコメントはこの回答のためのものでしたか?また、質問を編集して情報を追加し、ArcCatalogでテストしました。私の方法は機能しますが、Visual Studio内からF5を実行することはできません。もう少し作業を行う必要がありますが、構成ファイルを扱わなくても同じ結果を得ることができます。
ブランコ

ブランコ、あなたの思慮深い回答に感謝しますが、結局のところ、問題を引き起こしていたのは.NETフレームワークバージョンでした。
Michael Stimson、2015

1

これは、ArcMapとArcCatalogの拡張機能、さらにアドインを使用して数年かけて構築したファイルです。

ArcMapがVisual Studioでアドインをデバッグできない場合:

  • デバッグモードではなくリリースモード(古い非アドインアプローチを使用している場合は、\ bin \ Releaseではなく、\ bin \ Debug dllがregasmで登録された可能性が高いため、これは問題になる可能性があります。
  • UIの古いバージョンのツールがデバッグバージョンのロードを妨げている(Visual StudioなしでArcMapを起動し、すべてのコマンドを削除してすべてのアドインを削除し、ArcMapを閉じる)
  • アドイン以外のバージョンが使用されている可能性はありますか?そうでない場合は、dllを登録する必要があります
  • デバッグのためにアドインを手動でインストールする必要はありません
  • ソリューションとプロジェクトをクリーンアップし、アプリケーションファイルを手動で調べ、すべての/ binおよび/ objコンテンツを削除します
  • C:\ Users \ <NAME> \ Local Settings \ ESRI \ Desktop10.0 \ AssemblyCacheの内容を空にします
  • 以前に/デバッグ中にArcMapによって参照される可能性のある他のプロジェクトの\ binの場所に、デバッグしようとしているものと同じ名前の以前に構築されたDLL /アドインがないことを確認してください(つまり、ドットネット移行/アドインバージョン)衝突)
  • 一部のアドインのブレークポイントは、ツールのボタンがクリックされた後にのみ実行可能になります-それは初期化されたときです
  • ブレークポイントにヒットしない場合は、コンストラクターで例外がスローされ、ツールが実行されていない可能性があります。[デバッグ]メニューからすべてのCLR例外を表示して確認します->例外-> [共通言語ランタイム例外]を確認します
  • 他のすべてが失敗した場合は、再起動します

努力のおかげで、それらのすべてはリンクされた投稿で対処されました。Berendは通常の容疑者の1人ではなかったので(今回は)正解です。
Michael Stimson

0

これが解決策です:

binディレクトリのarcmap.exe.configからSupportedRuntimeを削除してみてください。

これは\ ArcGIS \ Desktop10.0 \ bin \ arcmap.exe.config xmlファイルです。

ArcGIS 10アドインのデバッグ時にブレークポイントを「ヒット」できないのはなぜですか?


質問でその投稿を参照しました。これは、正常に機能するArcMapに関するものではなく、問題の原因となっているのはArcCatalogです。いいね。私はこれに報奨金を提供しなければならないと思います。
Michael Stimson

こんにちは@ MichaelMiles-Stimson ArcCatalog.exe.configを編集してみましたか?私が開発した最後のアドインについては、この<!-<supportedRuntime version = "v4.0.30319" />->のコメントを外し、代わりにこの<supportedRuntime version = "v2.0.50727" />にコメントしました
rowanwins

@rowanwinsにコメントする<supportedRuntime version = "v2.0.50727" />が見つかりませんでした。バックアップがあり、代わりに<startup>エンクロージャーにある行を削除したい場合、この行がコメント化されている理由はありますか?
Michael Stimson、2015

おそらく、@ rowanwinsを回答として使用できます。これにより、少なくとも、表現しようとしている内容のスクリーンショットと、さらにいくつかの単語が表示される可能性があります。明日は調査します。
Michael Stimson、2015

0

いくつかの明らかなステップ(私はあなたがすでにこれらを試したと思いますが、それでもまだです)。

  1. モードがリリースではなく「デバッグ」のままかどうかを確認します。
  2. 「obj」および「bin」フォルダを削除して、再構築します。

はい、それを行いました。それはスタックオーバーフローの投稿の1つで言及されました。それはそれほど明白ではないものでなければなりません。
Michael Stimson、2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.