Visual Studio 2015中带有填充程序的InvalidProgramException

Ren*_*ogt 7 c# visual-studio invalidprogramexception microsoft-fakes visual-studio-2015

一段时间以前就已经提出了一个几乎相似的问题但尚未回答.由于我的设置略有不同,我开始尝试新的尝试:

我演示了我的代码的缩短版本,但即使是这个简短的版本也会产生错误.

我有一个方法返回一个实例System.Printing.LocalPrintServer:

public class PrintServerProvider
{
    public LocalPrintServer Provide()
    {
        return new LocalPrintServer(new string[0], PrintSystemDesiredAccess.EnumerateServer);
    }
}
Run Code Online (Sandbox Code Playgroud)

对于这种方法,我使用垫片实现了单元测试:

[TestClass]
public class PrintServerProviderTests
{
    [TestMethod]
    public void Provide_Success()
    {
        using (ShimsContext.Create())
        {
            bool constructorCalled = false;
            ShimLocalPrintServer.ConstructorStringArrayPrintSystemDesiredAccess = (instance, props, access) =>
            {
                constructorCalled = true;
            };

            PrintServerProvider provider = new PrintServerProvider();
            LocalPrintServer server = provider.Provide();
            Assert.IsNotNull(server);
            Assert.IsTrue(constructorCalled);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在Visual Studio 2013中,此测试工作正常.
但是,在Visual Studio 2015年(更新一),当被测试的方法调用new LocalPrintServer(...)

System.Printing.LocalPrintServer..ctor(String [] propertiesFilter,PrintSystemDesiredAccess desiredAccess)中的InvalidProgramException位于C:\ Projects\DemoProject\Program.cs中的DemoProject.PrintServerProvider.Provide():第10行.

被提出来了.(普通的高效调用工作正常.只有在运行测试方法时才会引发异常)

引用的程序集是:

  • System.Printing(v4.0.30319)来自C:\ Program Files(x86)\ Reference Assemblies\Microsoft\Framework.NETFramework\v4.5\System.Printing.dll
  • System.Printing.4.0.0.0.Fakes
  • Microsoft.QualityTools.Testing.Fakes(v2.0.50727)来自C:\ Program Files(x86)\ Microsoft Visual Studio 14.0\Common7\IDE\PublicAssemblies\Microsoft.QualityTools.Testing.Fakes.dll

System.Printing.Fakes

<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
<Assembly Name="System.Printing" Version="4.0.0.0"/>
  <StubGeneration>
    <Clear/>
  </StubGeneration>
  <ShimGeneration>
    <Clear/>
    <Add FullName="System.Printing.LocalPrintServer!"/>
  </ShimGeneration>
</Fakes>
Run Code Online (Sandbox Code Playgroud)

这两个项目(生产和测试)都使用.NET Framework 4.5.

我尝试重置框架以及引用.我尝试了不同版本的引用程序集.我尝试了所有版本的64位和32位.

在实际代码中,我也使用其他类的填充程序.LocalPrintServer是唯一发生异常的类.

任何人都可以解释导致这种情况的原因InvalidProgramException以及解决方法吗?

我在这个问题上设置了一笔赏金,这可能会通过相同的答案来解决.如果您认为您的答案是值得的,那么也可以随意在那里发帖.