2013-05-25 1 views
20

У меня особенно сложная сессия рефакторинга с использованием решения C# с несколькими проектами в Visual Studio 2012. Мне нужно было вытащить кучу кода в свои собственные сборки, чтобы код можно было разделить на несколько проектов, все в одном решение. Однако, независимо от того, что я пытаюсь, я получаю предупреждения для проектов, которые ссылаются на новые общие проекты: «Все проекты, ссылающиеся на {имя общего проекта], должны установить пакет nuget Microsoft.Bcl.Build».Все проекты, ссылающиеся на подпроект, должны установить пакет NuGet Microsoft.Bcl.Build (C#/Windows Phone 7)?

Я был над зависимыми проектами и совместно используемыми проектами с тонкой зубной гребенкой, подробно проверив, что все они используют одну и ту же версию и ту же самую DLL для Microsoft.Bcl версии 1.0.1.19 и Microsoft.Bcl. асинхронный версия 1.0.16 пакеты:

  • System.Runtime
  • System.Threading.Tasks

  • Microsoft.Threading.Task

  • Microsoft. Threading.Tasks.Extensions
  • Microsoft.Threading.Tasks.Extensions.Phone

Пути DLL все решены и идентичны. Файл XAP работает, но я все еще получаю это предупреждение, сообщая мне, что Microsoft.Bcl.Build не ссылается на зависимые проекты, несмотря на то, что я вижу, что это так.

Если я попытаюсь удалить, а затем переустановить эти два пакета с помощью NuGet для каждого задействованного проекта, я получаю ссылки с пустыми путями и значок предупреждения для 5 связанных DLL-ссылок. По какой-то причине NuGet добавляет ссылки, но не может найти DLL. Кроме того, если я это сделаю, я часто сталкиваюсь с проблемой наличия проектов, в которых я могу получить ошибку «Не могу добавить ссылку» при попытке добавить ссылку. Затем я закрываю и повторно открываю решение, и это приводит к ошибке «проект не загружается». Поэтому мне нужно вручную отредактировать файл проекта, удалить ошибочные инструкции импорта пакетов и перезагрузить проект.

Как я могу исправить эту проблему и какова общая техника для предотвращения этой головной боли в будущем? Предоставление NuGet управления недостающими пакетами не помогло.

ответ

6

Я только что пришел Повсеместно же вопрос и ошибка открывается здесь: http://nuget.codeplex.com/workitem/3268

Что я сделал, заключается в следующем, я добавил к уровню раствора пакета Microsoft.Bcl.Build

В мой dev env, если у вас нет загруженного пакета, просто щелкните правой кнопкой мыши по решению и выберите управление пакетами nuget, вы увидите желтую полосу с кнопкой восстановления, просто щелкните по ней, и все будет в порядке.

В моем сценарии сборки до компиляции проекта я запускаю эту команду:

.\myproject\.nuget\NuGet.exe install .\myproject\.nuget\packages.config -OutputDirectory .\myproject\packages 

Это позволит восстановить пакеты на уровне решения и вам будет хорошо.

Это должно быть исправлено к концу этого лета в версии 2.7 в соответствии с отчетом об итогах выпуска

+0

Я только что обновил пакеты NuGet в своем приложении, и теперь я получаю такое же предупреждение о необходимости установки Microsoft.Bcl.Build. Я не знаю, что это такое «восстановление» - это то, что обсуждается. Я не вижу никаких признаков «желтой полосы с кнопкой восстановления». Мое решение содержит проект развертывания Azure, который ссылается на основной проект, но пользовательский интерфейс Visual Studio 2012 не предоставляет параметр контекстного меню для управления пакетами NuGet для этого проекта. Любые мысли или предложения? –

+0

@ Bob.at.SBS close VS. В проводнике файлов откройте папку с вашим решением, зайдите в свою папку .nuget и отредактируйте файл packages.config. Добавьте эту строку в узле пакетов. Теперь откройте свое решение и щелкните правой кнопкой мыши по вашему решению -> Управление пакетами Nuget для решения. Появится желтая полоса. – Swell

+0

Чтобы завершить мой ответ, Microsoft.Bcl.Build является целевым файлом, VS запрашивает его для загрузки вашего проекта. Когда вы нажмете восстановление, он восстановит пакет, и вы сможете перезагрузить отсутствующие проекты! – Swell

16

В случае, если кто-то приходит через это и решение @ набухает сделало вы идете «WTF»:

Недавно я прошел через старший проект MVC и обновленный его (обновленная бритва, осина, HTTP , и т. д. пакеты nuget). Проект, независимо от себя, построил отлично, но когда я пошел публиковать его, он не смог с ошибками OP.

Оказывается, это потому, что я не обновлял *.Tests проекта, связанный с ним (следует вычислил, хотя и не знает, почему тесты являются , что тесно связан с проектом). Таким образом, чтобы исправить:

  1. правой кнопкой мыши Solution и управлять NuGet пакетов.
  2. Пройдите все пакеты, которые были обновлены в веб-проекте, и примените их также к другим проектам (каждое «Обновление» отобразит дерево с соответствующими проектами, я был в порядке, просто нажав OKAY).
  3. Перестроить.

Теперь вы должны быть хорошими и не должны лаять на вас. Надеюсь, что помогает другим.

+0

Мой ответ решает проблему восстановления пакета nuget и проблему с загрузкой проекта. – Swell