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

时间:2016-02-05 19:22:37

标签: c# visual-studio visual-studio-2015 microsoft-fakes invalidprogramexception

前一段时间已经提出过几乎相似的question,但尚未回答。由于我的设置略有不同,我开始尝试新的尝试:

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

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

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

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

[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);
        }
    }
}

在Visual Studio 2013 中,此测试正常 但在Visual Studio 2015(更新1)中,当测试方法调用new LocalPrintServer(...)

  

InvalidProgramException      在System.Printing.LocalPrintServer..ctor(String [] propertiesFilter,PrintSystemDesiredAccess desiredAccess)      在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>

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

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

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

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

我在this question上设置了奖金,这可能会通过相同的答案解决。如果你认为你的答案是赏金的话,也可以随意发帖。

0 个答案:

没有答案