.NETアプリケーションは、同じアセンブリの複数のバージョンをメモリに読み込むことができます。アセンブリは署名されませんが、アセンブリの新しいコピーがコンパイルされロードされるたびに、新しいアセンブリバージョン(マイナー部分)が自動的に取得されます。インスタンス化オブジェクトはコントロールによって管理されているので、型に関する問題はありません。そのため、オブジェクトがどのアセンブリから作成されているかが分かります。2つのバージョンのアセンブリがロードされたときにVisual Studio 2015で変数が評価されない
これはVS 2003以降で動作していましたが、最新のVS 2015ではこのシナリオのデバッグが壊れています。単一バージョンのアセンブリのみがメモリにロードされている間はすべて正常に動作しますが、2つ目のバージョンがロードされるときはいつでも、すべてのローカル/ウォッチウィンドウが空になります。 QuickWatchの式を評価しようとすると、コンパイラ例外が発生する "エラーCS1704:同じ単純名 'MyAssembly'を持つアセンブリが既にインポートされている。参照の1つ(「MyAssembly.dll」など)を削除するか、サイドバイサイドを有効にする。
ここで(2つのアセンブリがロードされる)VS2013とVS2015から取り付けデバッガと同じアプリケーションのスクリーンショットであります
だから、これはVS 2015でのデバッグがほとんど不可能になります。
元々これはコンパイラエラーです(私の考えはVS 2015デバッガのカバーの下で使用されています)。インターネット検索はあまり役に立ちません。ここに私が見つけることができたデバッガの問題に関連する唯一のリンクがあります: Visual Studio Debugger Failing to inspect variables。私の場合との違いは、メモリに2つのアセンブリがあるのは間違いだと私の場合はこれが意図であるということです。
今私は自分の選択肢について考えています。
- もちろん、理想的にはVS 2015にパッチを適用して問題を解決したいと考えています。しかし、現実的な私はこれが起こるとは確信していません。 (コンパイラが示唆するように)アセンブリは、クライアントのマシン上で生成され、署名のための鍵とそれらを提供することはできないので
- 署名アセンブリはオプションではありません。
- アセンブリが異なるドメインに読み込まれたときに、デバッガがケースを処理できるかどうかをAppDomainsで調べることができます。しかし、可能であれば、これは私のアプリケーションへのかなりの(そして計画外の)変更になるでしょう。
他にもいくつかアイデアを提案できますか? Thnaks。
私は既に回避策を見つけましたが、アセンブリに署名することはできません。クライアントが自分で作成して自分のアセンブリに署名するためにキーを提供する必要はありません(この目的のためだけに作成して使用することは簡単ですが)。これがあなたのクライアントに強制するよりも多くの要件であれば、アセンブリをロードする前にアセンブリに署名することさえ可能です。強力な名前ツール(sn.exe)を使用して、事実の後でアセンブリに署名することができます。 – PfhorSlayer