0

私は最も奇妙な問題を抱えています。ロール プロバイダーのインスタンス化を簡単にテストするために、次の変更されたアクション メソッドを実行します。

public ActionResult Login()
{
    Educ8RoleProvider p = new Educ8RoleProvider();
    var model = new LoginModel();
    return View(model);
}

ロール プロバイダーは、多かれ少なかれ次のようになります。

public class Educ8RoleProvider : RoleProvider, IDisposable
{
    private readonly IMemberRoleRepository _memberRoleRepository = new MemberRoleRepository();

    public Educ8RoleProvider()
    {
    }
}

のコードはLogin例外なく実行されますが、行にブレーク ポイントを配置するとvar model = new LoginModel();、変数pが消えてしまいます。pクイックウォッチを配置しようとすると、イミディエイト ウィンドウで検査しようとしているのと同じエラーが発生します。

The name 'p' does not exist in the current context

今朝、VS11 ベータトップの VS2012 RC からアップグレードしました。これがどこかの新しい設定によるものなのか、それとも何かによるものなのかはわかりません。

追加:どういうわけか、デバッグ構成をリリース ベースの構成に変更したことがわかりました。

4

2 に答える 2

0

私の推測では、それは最適化されて取り除かれているということです。結局のところ、あなたはそれを何にも使用していません。

デバッグビルドでは問題ないと思いますが、最適化されたビルドではうまくいきません。(もちろん、コンストラクターは引き続き呼び出す必要があります。)

使用しないのであれば、それを持っているべきかどうか疑問に思います.少なくともコードの匂いです.

これが本当に「[your] ロール プロバイダーをインスタンス化するための簡単なテスト」である場合は、代わりに単体テストをお勧めしますか? :)

于 2012-06-28T18:19:29.770 に答える
0

変。頭に浮かぶ唯一のことは、VS2012 が最後に参照されたときに変数を範囲外にノックアウトする可能性があるということです。後で p にアクセスするための行を入れてみて、それを視聴できるかどうかを確認しましたか?

于 2012-06-28T18:20:40.233 に答える