2

安装 VS2012 Update 1 后,我无法创建假程序集以供Microsoft.Practices.EnterpriseLibrary.Logging.dll参考。但是伪造程序集Microsoft.Practices.EnterpriseLibrary.Commom.dllSystem.dll而其他人则正常创建。我发现这个问题的唯一解决方案是卸载 VS2012 的更新 1,然后一切恢复正常。该问题发生在本地计算机和 tfs 构建服务器上。

这是 VS2012 在其错误列表中显示的错误:

'Microsoft.Practices.EnterpriseLibrary.Logging.Fakes.StubLogWriter' does not implement inherited abstract member 'Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter.GetFilter(string)' [c:\users\administrator\documents\visual studio 2012\Projects\DeleteMe\DeleteMe\obj\Debug\Fakes\mpell\f.csproj]    c:\users\administrator\documents\visual studio 2012\Projects\DeleteMe\DeleteMe\f.cs 68219   DeleteMe    26

我想这是 VS2012 Update 1 的错误,但也许我缺少一些要检查的属性或什么?

4

1 回答 1

1

在 Visual Studio 2012 Update 1 中,我们删除了几个导致 Fakes 静默跳过生成存根和填充程序的内部限制。LogWriter 恰好是 VS2012 RTM 默默跳过的类之一。不幸的是,Update 1 的改进暴露了 Fakes 的其他一些限制,在这种情况下,它无法区分 LogWriter 类的 GetFilter 方法的泛型和非泛型重载。

作为一种解决方法,请从 Fakes 配置中删除此类型。这是一个 .Fakes 文件,可以实现这一点。

<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
  <Assembly Name="Microsoft.Practices.EnterpriseLibrary.Logging" Version="5.0.505.0"/>
  <StubGeneration>
    <Remove FullName="Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter!"/>
  </StubGeneration>
</Fakes>

作为一般做法,最好修改默认的 .Fakes 文件并仅指定项目中需要的存根和填充程序类型。这显着缩短了构建时间,并有助于避免不适用于您的测试需求的 Fakes 限制。

<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/" Diagnostic="true">
  <Assembly Name="Microsoft.Practices.EnterpriseLibrary.Logging" Version="5.0.505.0"/>
  <StubGeneration>
    <Clear/>
    <Add FullName="Namespace.TypeName!"/>
  </StubGeneration>
  <ShimGeneration>
    <Clear/>
    <Add FullName="Namespace.TypeName!"/>
  </ShimGeneration>
</Fakes>
于 2012-12-21T00:35:56.353 回答