2011-07-09 138 views
3

我正在处理监视打印队列的应用程序。要做到这一点,它需要能够管理它们。当我运行它进行调试时,该应用运行正常,但是,当我尝试单元测试该类时,抛出了安全异常。有没有办法让Visual Studio单元测试具有更高的安全级别?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的应用程序使用。 Visual Studio测试项目需要以.NET 4.0为目标。

回答

0

你的问题是可能与此相关的已知的错误:http://connect.microsoft.com/VisualStudio/feedback/details/552520/methodaccessexception-when-printqueuecollection-disposed

有上市有两种解决方法,其中之一是面向.NET 3.5,而不是4.0。

您是否确定在调试时不会在终结器线程上抛出异常?你没有说明它何时处置。如果你明确地调用dispose然后调试,你会得到异常吗?例如。

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