无法在VS2012 Update 1上添加Microsoft.Practices.EnterpriseLibrary.Logging的Fakes程序集

时间:2012-12-05 09:09:51

标签: visual-studio-2012 enterprise-library microsoft-fakes

安装VS2012 Update 1后,我无法为Microsoft.Practices.EnterpriseLibrary.Logging.dll引用创建虚假程序集。但是,Microsoft.Practices.EnterpriseLibrary.Commom.dllSystem.dll和其他人的伪装配正常创建。我发现这个问题的唯一解决方案是卸载VS2012的Update 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的一个错误,但也许我错过了一些要检查的属性或什么?

1 个答案:

答案 0 :(得分: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>