Visual Studio 2015で透過型プロキシのランタイム型をウォッチする際の注意点について

こんにちは、Visual Studio サポート チームです。

今回は Visual Studio 2015 でアプリケーションをデバッグする際に使用する、ウォッチ (変数の値の表示) 機能に関して、ご注意いただきたい問題についてご案内いたします。

 

問題

Visual Studio 2015 で .NET Framework アプリケーションをデバッグする際、ContextBoundObject 派生クラスなどのオブジェクトの値をウォッチ ウィンドウで表示しようとすると、以下のエラーが発生し、値を確認することができません。

 エラー:  "このコンテキストでは、透過プロキシのランタイム型を取得できません。"

Error

 

 

原因

本問題は、Visual Studio 2015で導入された新しい式エバリュエーターが透過プロキシのランタイム型を解決できない不具合に起因しており、Visual Studio 2015、Visual Studio 2015 Update 1、Visual Studio 2015 Update 2 で発生することが確認されております。

本問題はマイクロソフトにて製品の問題として認識されており、可能な限り、将来バージョンの製品アップデートで修正される予定です。

 

対処方法

本問題は、Visual Studio のオプションで、"従来のC#およびVBの式エバリュエーターを使用する" を選択することで対処することが可能です。

以下にオプションの設定方法をご案内します。

 

<オプションの設定方法>

  1. Visual Studio を起動し、メニューから [ツール] – [オプション] を選択します。
  2. [オプション] ダイアログの左側のツリーから "デバッグ" を選択し、右側のオプションで "従来のC#およびVBの式エバリュエーターを使用する" にチェックを付けます
  3. [OK] ボタンをクリックし、設定を保存します。

 

Option2

 

 

<設定変更後の表示例>

以下のコード例のようなプログラムをデバッグ実行します。

“int a = 0” の行などにブレーク ポイントを設定してブレークさせた状態で変数を確認します。

 

コード例:

-------------

class Program

   {

       static void Main(string[] args)

       {

          var obj = new SampleClass();

          int a = 0;

       }

  }

 

 public class SampleClass : ContextBoundObject

  {

     int b=1;

   }

---------

ブレーク ポイントにヒットしたら、[ローカル] ウィンドウの “Obj” のツリーを拡張し、“UnwrappedServerObject” 以下で透過型プロキシのランタイム型の情報を確認することができます。

 

Unwrapped2

 

注意点

従来のC#およびVBの式エバリュエーターを使用する" オプションを有効にした場合、Visual Studio のデバッガーで使用される式評価の機能は Visual Studio 2013 以前の製品で使用されているものに切り替えられます。

Visual Studio 2015 では、従来のC#およびVBの式評価に加え、新機能として2015 に追加された コンパイラー Roslynを基準とした式評価も搭載されています。

Visual Studio 2015のデバッガー機能では、既定では、Roslynベースの式評価が有効となっておりますが、”従来のC#およびVBの式エバリュエーターを使用する" オプションを有効にした場合には、Roslynベースの式評価はご利用いただくことはできません。

Roslynベースの式評価ではVisual Studio 2015で新しく追加された “ラムダ式” や ”C#6.0 で新たに追加された式“の評価に対応しており、上記対処策では、これらの新しい機能を含んだ式の評価を行えないケースがある点にご注意ください。

 

[ラムダ式の評価について]

Support for debugging lambda expressions with Visual Studio 2015 (英語)

https://blogs.msdn.microsoft.com/visualstudioalm/2014/11/12/support-for-debugging-lambda-expressions-with-visual-studio-2015/

 

[C#6.0の新機能について]

強化された新しい C# 6.0

https://msdn.microsoft.com/ja-jp/magazine/dn802602.aspx

 

<ご参考情報>

ContextBoundObject – Part #1 – Making Contexts (英語のみのご案内)

https://blogs.msdn.microsoft.com/tilovell/2011/02/06/contextboundobject-part-1-making-contexts/

 

製品の動作でご不便をおかけして申し訳ございませんが、上記対処方法がご参考になりましたら幸いです。