Я не могу сгенерировать сборку Microsoft Fakes для библиотеки классов (.NET 4.5), когда указанная библиотека классов ссылается на PCL (Portable Class Library), нацеленную на .Net 4.5 и Silverlight 5 в Visual Studio 2013.
Это происходит только в том случае, если библиотека классов (.NET 4.5):
- Объявляет тип, производный от типа, который можно найти в System.dll v4.0.0.0 и v2.0.5.0.
- Объявляет другой тип, производный от типа, объявленного в библиотеке PCL, который, в свою очередь, является производным от типа, объявленного в System.dll v.2.0.5.0.
И библиотека классов .NET 4.5, и библиотека PCL компилируются нормально. Однако у меня есть проект модульного теста (также .NET 4.5), который должен генерировать фейки для библиотеки классов .NET 4.5. Попытка сгенерировать подделки не удалась и выдает следующую ошибку.
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 в свой проект Unit Test и определить перенаправление привязки сборки для System.Dll, но это не сработало. Я подозреваю, что перенаправление привязки сборки не влияет на генерацию подделок.
Воспроизвести проблему легко.
Создайте переносимую библиотеку классов с именем Repro.Portable, имеющую единый интерфейс:
using System.ComponentModel;
namespace Repro.Portable
{
public interface IPortableEntity : INotifyPropertyChanged
{
}
}
Затем создайте библиотеку классов .NET 4.5 с именем Repro, которая ссылается на переносимую библиотеку классов, и объявите следующие два интерфейса.
using Repro.Portable;
namespace Repro
{
public interface ISpecializedEntity : IPortableEntity
{
}
}
а также...
using System.ComponentModel;
namespace Repro
{
public interface IOtherInterface : INotifyPropertyChanged
{
}
}
Наконец, создайте проект модульного теста, ссылающийся на сборки Repro и Repro.Portable. Компиляция на этом этапе будет успешной. Однако попытка создать Microsoft Fakes для сборки Repro не удастся.
Поскольку все это кажется вполне законным, мне остается только гадать, столкнулся ли я с ошибкой в генераторе Microsoft Fakes или существует обходной путь.
Есть ли способ заставить работать генерацию фейков, или я застрял с использованием другой структуры Mocking при столкновении с этим конкретным сценарием?