Что ж, если кто-то работает с унаследованным кодом и оказывается вовлеченным в использование Microsoft Moles, я тщательно изучил эту тему и надеюсь избавить некоторых от гнева и разочарования, с которыми я столкнулся.
Я попытался использовать предложенный ответ, который означал переход в каталог Moles (в C: \ Program Files ..) и запуск утилиты командной строки (moles.exe) в качестве администратора. Существует множество опций, одна из которых позволяет вам включать сборки, на которые есть ссылки (как предложено выше).
Однако, даже при попытке запустить утилиту без ссылочных сборок, утилита в конечном счете вызывает компилятор C # (csc.exe) с предварительно определенными ссылочными путями сборки, и я заключаю, что возникает путаница между версиями .NET Framework , Я не смог получить , а не , чтобы включить эти пути сборки.
Мой конкретный сценарий состоял в том, что я пытался Mole пользовательской сборки, однако, поскольку, очевидно, на этом компьютере был установлен .NET 4.5, он жаловался на компиляцию о System.Collections.Generics IReadOnlyCollection, IReadOnlyDictionary и, я думаю, один другой.
Решение : единственное решение , которое я получил, заключалось в использовании фильтров Mole, о которых я читал в других публикациях и на веб-сайте Microsoft Moles (есть специальная ссылка для Устранение неполадок .NET 4.5 на главной странице). В Visual Studio я просто добавил сборку Moles в свой проект модульного тестирования для своей пользовательской сборки, на которую ссылаются, щелкнув правой кнопкой мыши в обозревателе решений. Затем я попытался построить. Для каждой ошибки, которую я получал, я отмечал классы-нарушители и исключал их из Shimmed или Stubbed, добавляя в файл родинок следующее:
<Moles xmlns="http://schemas.microsoft.com/moles/2010/">
<Assembly Name = "MyCustomAssembly" />
<StubGeneration>
<Types>
<Remove TypeName="ClassThatUsesIReadOnlyCollectionEtc" />
</Types>
</StubGeneration>
<MoleGeneration>
<Types>
<Remove TypeName="ClassThatUsesIReadOnlyCollectionEtc" />
</Types>
</MoleGeneration>
</Moles>
Теперь ясно, что это не сработает, если вам понадобятся классы, которые вы исключаете из генерации моль / огрызок, однако для моего случая это работало нормально, потому что классы-нарушители не были важны, и я бы не стал ' Тебе не нужно что-то заглушки или Шим в этих классах.