安装VS2012 Update 1后,我无法为Microsoft.Practices.EnterpriseLibrary.Logging.dll
引用创建虚假程序集。但是,Microsoft.Practices.EnterpriseLibrary.Commom.dll
,System.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的一个错误,但也许我错过了一些要检查的属性或什么?
答案 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>