Попробуйте «Добавить ссылку» System.Threading.Tasks.dll
явно из C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5
. В качестве альтернативы вы можете использовать каталог C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Facades
.
ОБНОВЛЕНО: я больше изучил проблему после прочтения ответа об удалении ссылки на System.Runtime
и Могу добавить следующее: Ссылка на System.Runtime
будет добавлена из-за ошибки в текущей версии пакета NuGet Microsoft.Tpl.Dataflow.4.5.1-rc
. Если добавить ссылку на тот же System.Threading.Tasks.Dataflow.dll
непосредственно в Visual Studio, ссылка System.Runtime
не будет добавлена, и проблем не будет.
С помощью NuGet Package Explorer можно загрузить исходный Microsoft.Tpl.Dataflow.4.5.1-rc.nupkg
из "официального источника пакетов NuGet". . В конце пакета Matadata вы увидите
Можно изменить метаданные (нажмите Ctrl-K) и удалить ссылку:
После этого можно сохранить измененный файл Microsoft.Tpl.Dataflow.4.5.1-rc.nupkg
в какую-нибудь директорию. После добавления нового местоположения (локального каталога) в список источников NuGet (см. здесь или здесь) можно будет добавить новый пакет из локального источника (не забудьте выбрать отображение всех пакетов, включая пре-релиз, см. рисунок ниже):
Модифицированный Microsoft.Tpl.Dataflow.4.5.1-rc.nupkg
не добавит System.Runtime
и проект скомпилируется без ошибок.
Таким образом, ошибка существует не в Visual Studio 2012 RC и даже не в Microsoft.Tpl.Dataflow.dll
. Ошибка содержится только в метаданных предварительной версии пакета Microsoft.Tpl.Dataflow
NuGet, доступного в настоящее время в «официальном источнике пакета NuGet».
Вы можете опубликовать отчет об ошибке авторам, чтобы пакет был исправлен.
ОБНОВЛЕНО 2: даже если мой ответ уже помечен как решенный и награда за вознаграждение, проблема все еще не выходит из моей головы. На самом деле я вижу две открытые проблемы:
- Почему наличие неиспользуемой сборки
System.Runtime
может привести к ошибке при сборке проекта.
- Я вижу некоторые общие проблемы в том, как работает удаление или обновление пакетов NuGet (подробности см. ниже).
Примем только тот факт, что первая проблема существует независимо от причины. Вторая проблема вызывает у меня беспокойство. Я вижу здесь настоящую проблему. Каждый может провести следующий эксперимент, чтобы лучше меня понять:
- Создайте новое пустое консольное приложение в Visual Studio 2012 RC.
- Убедитесь, что в проекте нет ссылки на
System.Runtime
.
- Откройте «Консоль диспетчера пакетов» из «Инструменты» / «Диспетчер пакетов библиотек».
- Выполните команду "Install-Package Microsoft.Tpl.Dataflow -Pre" в "Консоли диспетчера пакетов".
- Убедитесь, что
System.Runtime
и System.Threading.Tasks.Dataflow
включены в список ссылок проекта.
- Выполните команду «Uninstall-Package Microsoft.Tpl.Dataflow» в «Консоли диспетчера пакетов».
- Убедитесь, что
System.Threading.Tasks.Dataflow
удалены из списка ссылок проекта, но System.Runtime
все еще есть в списке ссылок.
Я провел еще один эксперимент и изменил версию модифицированной Microsoft.Tpl.Dataflow.4.5.1-rc.nupkg
, где я удалил ссылку на System.Runtime
, с 4.5.1-rc
на 4.5.1-rc1
и сохранил ее локально (она будет сохранена под Microsoft.Tpl.Dataflow.4.5.1-rc1.nupkg
). После этого я увидел "новую" версию в списке обновлений моего проекта:
Если я установлю обновление, ссылка на System.Runtime
также не будет удалена.
Таким образом, текущая реализация «Обновления» и «Удалить» NuGet имеет ошибку или общую проблему дизайна. Если мы добавим пакет в наш проект и сделаем некоторые обновления проекта, мы получим ссылки на все зависимые сборки всех старых версий. Старые ссылки, добавленные NuGet из старых версий пакета, не будут удалены во время удаления или обновления. Во-первых, нехорошо иметь мусор в ссылках проекта, но из-за наличия первой проблемы (ошибка при компиляции, если ссылка на нереферентный System.Runtime
существует) проблема будет еще более серьезной.
Поэтому, если в NuGet ничего не изменится, обновление до следующей версии Microsoft.Tpl.Dataflow
не решит проблему для пользователей, установивших Microsoft.Tpl.Dataflow
в версии 4.5.1 (или, возможно, в ранней версии). Всем пользователям придется вручную удалить ссылку на System.Runtime
. Я думаю, что это настоящая проблема NuGet, которую должны решить разработчики NuGet. Я отправлю описание проблемы на http://nuget.org/ позже.
Отчет об ошибке, который я разместил в NuGet, можно найти здесь (извините за не идеальное форматирование текст).
person
Oleg
schedule
05.06.2012