У меня есть 2 проекта, переносимая библиотека классов и обычный проект модульного тестирования. В библиотеке переносимых классов я использую NuGet для ссылки на пакет переносимости Microsoft.BCL, который поставляется с двумя сборками (System.Threading.Tasks.dll
и System.Runtime.dll
, обе версии 1.5).
Однако, когда я пытаюсь сослаться на эти же библиотеки DLL в моем проекте модульного тестирования (как с помощью NuGet, так и вручную просматривая каталог \packages\Microsoft.Bcl.1.0.19\lib\portable-net40+sl4+win8+wp71
), Visual Studio автоматически указывает ссылку на библиотеки DLL в другой папке, расположенной здесь C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\
, которая имеет версию 4.5.
Теперь метод, который мне нужно протестировать, принимает CancellationToken
в качестве параметра и выдает ошибку компиляции: The type 'System.Threading.CancellationToken' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Threading.Tasks, Version=1.5.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
, потому что ссылка на его библиотеку v4.5, а не на v1.5.
Однако мне удалось написать тесты для методов, которые не используют ни одну из этих функций из библиотеки BCL v1.5.
Почему Visual Studio заменяет мою библиотеку, на которую я ссылаюсь, той, которая идет с фреймворком? Как мне сказать визуальной студии использовать только те, на которые я указываю в определенном каталоге?
Использование Visual Studio 2012 с обновлением 2.