【问题标题】:Visual Studio Unit Test Security ExceptionVisual Studio 单元测试安全异常
【发布时间】:2011-07-09 15:17:32
【问题描述】:

我正在开发一个监控打印队列的应用程序。为此,它需要能够管理它们。当我运行它进行调试时,应用程序运行良好,但是,当我尝试对该类进行单元测试时,会引发安全异常。有没有办法给 Visual Studio 单元测试更高的安全级别?

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

抛出异常: 尝试通过安全透明方法“MS.Internal.PrintWin32Thunk.PrinterDefaults.Dispose(Boolean)”访问安全关键方法“MS.Internal.PrintWin32Thunk.PrinterDefaults.InternalDispose(Boolean)”失败。

同样,在单元测试之外使用时,不会引发异常,并且类会按预期工作。我曾尝试以管理员身份运行 Visual Studio,但仍然收到异常。

更新:看来我将无法测试该课程。包含它的类库已经用 .NET 3.5 编写,这就是为什么在使用该类时不会发生异常的原因。我做了一些进一步的实验,发现即使这个类库面向 .NET 3.5,引发异常的类也不能被面向 .NET 4.0 的应用程序使用。 Visual Studio 测试项目需要以 .NET 4.0 为目标。

【问题讨论】:

    标签: c# .net visual-studio-2010 unit-testing


    【解决方案1】:

    您的问题可能与此已知错误有关: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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-20
      • 2010-09-18
      • 1970-01-01
      • 2016-10-30
      • 2012-10-18
      • 1970-01-01
      相关资源
      最近更新 更多