Подтвердить что ты не робот

Фиксирование пакетов и ссылок NuGet раз и навсегда

Windows 8.1 Enterprise x64, Visual Studio 2015, MVC 5, EF 6, VS Онлайн с использованием git

Я - относительно новый разработчик с Visual Studio (около девяти месяцев), и с тех пор, как я начал, у меня было невероятно трудное время со ссылками и пакетами NuGet. Все мои рекомендации работали правильно в пятницу, когда я закрыл свой компьютер на выходные. Я не касался компьютера в течение всего выходного дня, теперь я загрузился сегодня, и у меня есть тонна контрольных ошибок:

список ошибок

(Всего 6 262 ошибки, но я, очевидно, не могу скриншоты всего этого.)

Как я уже сказал, такая проблема возникает очень часто, и это невероятно расстраивает. Вещи, которые я пробовал:

  • Убедитесь, что ссылки, на которые действительно ссылаются ошибки, ссылаются
  • Un/переустановить пакеты, которые бросают ошибки в NuGet
  • Полностью удалить содержимое папки packages и позволить NuGet восстановить их (все переустановленные, представления имеют те же ошибки, что и раньше)
  • Убедитесь, что для каждой ссылки установлено значение Copy Local
  • Закройте решение, удалите все папки bin и obj, перезагрузите компьютер, очистите, перестройте
  • Убедитесь, что все необходимые ссылки находятся в соответствующем web.config (внутри Views или в корневом каталоге)
  • Проверьте параметр NuGet для восстановления отсутствующих пакетов (не отображается, все пакеты находятся в моей локальной папке packages)
  • Другие вещи на SO, которые, я уверен, я забыл перечислить здесь.

Я с ума сойду с этими пакетами и ссылками. Это другое решение каждый раз, и на этот раз я не могу понять это. Неужели я пропустил какое-то очевидное исправление, чего я забыл? Есть ли способ как-то взять резервную копию, когда она работает, и восстанавливать ее всякий раз, когда что-то ломается? Любые идеи, будь то помощь в текущей проблеме или устранение основной проблемы, будут очень оценены.

Дополнительная заметка

Проблема заключается не только в представлениях - контроллеры также бросают ошибки. В частности:

Невозможно найти имя или имя пространства имен 'Controller' (вам не хватает директивы using или ссылки на сборку?)

(В буквальном смысле это говорит Controller, что я ничего не изменил для конфиденциальности или еще чего-то.)

Они выбрасываются, несмотря на то, что у меня есть инструкции using для всех необходимых пространств имен. Операторы using сами работают правильно, но ошибка вызывается в коде. Предлагаемое автоматическое исправление заключается в том, чтобы вручную ссылаться на все: например, var sb = new StringBuilder(); хочет, чтобы я изменил строку на var sb = new System.Text.StringBuilder();. Тестирование этого исправления не исправляет проблему, эта же ошибка возникает, но на System вместо StringBuilder.

Дополнительная запрашиваемая информация

  • Я использую git с VS Team Services (но пакеты игнорируются с помощью .gitignore).
  • Я и еще один человек работают над этим, но другой человек не коснулся его вообще (даже не отрываясь от удаленного репо) через несколько недель.
  • Ссылки в файле .csproj находятся в формате ..\..\..\packages\ (правильный для местоположения относительно файла .csproj).
  • Таргетинг .NET 4.6 (всегда был, это не новый)
  • Все ссылки разрешены, никаких восклицательных знаков в списке ссылок.
4b9b3361

Ответ 1

Новые проекты

Для обеспечения правильной работы пакетов с git:

требуется одна вещь:

При создании репозитория убедитесь, что вы добавили .gitignore для разработки Visual Studio. Вы можете искать Google для такого файла или взять его из здесь.

Это гарантирует, что вы не совершите ничего, что может вызвать проблемы позже.

Это должно решить многие проблемы, которые обычно возникают при проверке пакетов в репозитории кода. Вы можете добавлять/удалять пакеты и обновлять пакеты, а также иметь возможность клонировать репозиторий на новый компьютер, и пакеты будут автоматически восстановлены.

Существующие проекты

Это хорошо для новых проектов. Если у вас уже есть проект с большим беспорядком, его очень сложно исправить, так как Visual Studio поддерживает версии пакетов в нескольких местах - packages.config и app.config(и там, где это необходимо, web.config).

Вариант 1 - Исправить текущий проект

Вы можете удалить все пакеты (удалить все ссылки из всех проектов и удалить содержимое пакета).

Убедитесь, что пакеты больше не отображаются в любом файле (например, packages.config или app.config). Теперь добавьте .gitignore, а затем начните добавлять пакеты обратно.

Вариант 2 - Создайте новый проект

Если это не сработает, запустите новый проект, добавьте .gitignore, перенесите весь код (только ваш код) и установите пакеты.

Ответ 2

Я не совсем хорошо знаком с тем, как Git работает в VS, но я вспоминаю об одном из недавних случаев использования TFS, который отделяет решение от источника управления, фиксирует все пакеты, очищает и восстанавливает, прежде чем связывать его снова куча вопросов, касающихся ссылок NuGet.

Прошу прощения, если Git работает в разных вариантах.