当所述类库引用在Visual Studio 2013下目标为.Net 4.5和Silverlight 5的PCL(可移植类库)时,我无法为类库(.NET 4.5)生成Microsoft Fakes程序集。
只有在类库(.NET 4.5):
时才会出现这种情况.NET 4.5类库和PCL库都编译得很好。但是我有一个单元测试项目(也是.NET 4.5)需要为.NET 4.5类库生成Fakes。试图生成假货失败并给我以下错误。
error : assembly Repro.dll failed to load properly Could not resolve assembly 'System, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'. Are you missing an assembly reference?
尝试在我的单元测试项目中添加对System.Dll v2.0.5.0的引用失败,因为项目中已经存在对组件'System'v4.0.0.0的引用。
我还尝试将App.Config添加到我的单元测试项目并为System.Dll定义程序集绑定重定向,但它不起作用。我怀疑程序集绑定重定向对Fakes生成没有任何影响。
重现问题很简单。
创建名为“Repro.Portable”的可移植类库,它具有单个接口:
using System.ComponentModel;
namespace Repro.Portable
{
public interface IPortableEntity : INotifyPropertyChanged
{
}
}
然后创建一个名为“Repro”的.NET 4.5类库,它引用可移植类库并声明以下两个接口。
using Repro.Portable;
namespace Repro
{
public interface ISpecializedEntity : IPortableEntity
{
}
}
和...
using System.ComponentModel;
namespace Repro
{
public interface IOtherInterface : INotifyPropertyChanged
{
}
}
最后,创建一个引用Repro和Repro.Portable程序集的单元测试项目。此时编译将成功。但是,尝试为Repro程序集生成Microsoft Fakes将失败。
由于所有这些看起来都是非常合法的事情,我想知道我是否遇到了Microsoft Fakes生成器中的错误,或者是否存在变通方法。
有没有办法让Fakes生成工作,或者在遇到这种特定情况时我是否仍然使用不同的Mocking框架?
答案 0 :(得分:2)
Microsoft为该错误提供了一种解决方法。
要解决此问题,请在.fakes文件中添加如下所示的XML blob。
<Compilation>
<Reference Path="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.0\Profile\Profile158\System.dll" FullName="System, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e"/>
</Compilation>
在本地构建时它确实有效,但是我还没有测试这是否是使用TFS在线构建服务器时可行的解决方法。