2011-07-09 26 views
3

私はプリントキューを監視するアプリケーションを開発中です。これを行うには、それらを管理する必要があります。しかし、デバッグのためにアプリケーションを実行するとアプリケーションが正常に動作しますが、クラスのセキュリティテストが行​​われるとユニットテストが実行されます。ビジュアルスタジオユニットのテストに高いセキュリティレベルを与える方法はありますか?Visual Studioユニットテストのセキュリティ例外

PrintQueue q = new PrintQueue(server, QueueName, 
        PrintSystemDesiredAccess.AdministratePrinter); 

は例外をスロー:セキュリティ上重要なメソッドにアクセスするためのセキュリティ透明法「MS.Internal.PrintWin32Thunk.PrinterDefaults.Dispose(ブール)」で 試み「MS.Internal.PrintWin32Thunk.PrinterDefaults.InternalDispose(ブール値)」失敗しました。

再び、例外はスローされず、クラスはユニットテストの外で使用されたときに期待通りに機能します。私は管理者としてVisual Studioを実行しようとしましたが、まだ例外を受けました。

更新:私はこのクラスをテストすることができないようです。クラスライブラリを含むクラスライブラリは既に.NET 3.5で記述されているため、クラスが使用されているときに例外が発生しません。私はもう少し実験を行いましたが、このクラスライブラリが.NET 3.5をターゲットにしていても、例外を投げているクラスは.NET 4.0をターゲットとするアプリケーションでは使用できません。 .NET 4.0をターゲットにするには、Visual Studioのテストプロジェクトが必要です。

答えて

0

あなたの問題は、この既知のバグに関連おそらくです:http://connect.microsoft.com/VisualStudio/feedback/details/552520/methodaccessexception-when-printqueuecollection-disposed

.NET 3.5ではなく4.0を標的とすることであるそのうちの一つが記載されている2つの回避策があります。

デバッグ中にファイナライザスレッドで例外がスローされないことは確かですか?あなたはそれが処分されたときは述べていません。明示的にdisposeとdebugを呼び出すと例外が発生しますか?例えば。

PrintQueue q = new PrintQueue(server, QueueName, 
       PrintSystemDesiredAccess.AdministratePrinter); 
q.Dispose(); 
関連する問題