2009-03-23 7 views
25

私はC#プロジェクトとメインプロジェクトの単体テストを持つテストプロジェクトを持っています。私はテスト可能なinternalメソッドを持っていたいので、Visual Studioテストプロジェクトで持つことができる魔法のアクセサオブジェクトなしでそれらをテストしたいと思います。私はInternalsVisibleToAttributeを使用したいと思いますが、毎回私はそれをやり直す必要がありました。覚えているのは、アセンブリに署名するための鍵ファイルを作成してから、sn.exeを使用して公開鍵等々。InternalsVisibleToAttributeを使用する簡単な方法はありますか?

  • 、SNKファイルを作成するアセンブリに署名するプロジェクトを設定し、公開鍵を抽出し、InternalsVisibleTo属性を適用するプロセスを自動化するユーティリティはありますか?

  • 署名アセンブリなし属性を使用する方法はありますか?

答えて

32

あなたはInternalsVisibleToを使用するために署名したアセンブリを使用する必要はありません。署名付きアセンブリを使用しない場合は、アセンブリの完全な名前を入力するだけです。 、

[assembly: InternalsVisibleTo("CompanyName.Project.MyAssembly.Test")] 
13

ブライアンは正しいですが、:あなたはアセンブリをテストするにMyAssemblyMyAssembly.Test)にアクセスできるようにしたい場合は

だから、あなたがMyAssemblyためAssemblyInfo.csに必要なのは、このような試験アセンブリの名前です。あなたが署名されたアセンブリを持っていて、そのアセンブリの公開鍵を取得したい場合があります。

このキーを取得することは、まさに面倒です。
したがって、これを実行しました:
VS.NETで私の外部ツールをカスタマイズしましたので、マウスを1回クリックするだけで現在のプロジェクトのアセンブリの公開鍵を取得できます。
これはどのように行うのです、VS.NETで

  • を「ツール」メニューを開き、「外部 ツール」と呼ばれているウィンドウが
  • を開きます
  • 「外部ツール」をクリック:タイトル、「ゲット公開鍵」「」コマンドで
  • を入力し、「引数」でC:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\sn.exe
  • でタイプ、タイプのために追加
  • クリックあなたはこのプロジェクトのために公開鍵を確認する必要があり、
  • プロジェクトをビルド、

次にあなたが「出力 ウィンドウを使用」オプションをチェックしていることを確認して、あなたはをクリックすると「公開鍵取得]出力ウィンドウ。

+1

私は[reflector](http://www.reflector.net/)や[ilspy](http://wiki.sharpdevelop.net/ILSpy.ashx)のようなツールを使ってよく –

3

"Reflection"を使用する内部メソッドを呼び出す別の方法があります。

 BindingFlags bindingFlags = BindingFlags.Instance | BindingFlags.NonPublic; 

     MethodInfo minfo = typeof(BaseClassName).GetMethod("MethodName", bindingFlags); 
     BaseClassName b = new BaseClassName();    
     minfo.Invoke(b, null); 

ここでは、「BaseClassName」は別のクラスライブラリのクラスの名前であり、「MethodName」は内部メソッドの名前であると仮定します。

関連する問題