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

Почему Visual Studio отказала в доступе, ошибка кода 5 при попытке построить решение с пакетами NuGet?

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

Error 3 The command ""D:\Custom Work\MySolution\Project\.nuget\nuget.exe" install
    "D:\Custom Work\MySolution\Project\AAIA.Model\packages.config" -source ""
    -RequireConsent -o "D:\Custom Work\MySolution\Project\packages"" exited with code 5.
    Please verify that you have sufficient rights to run this command.

Я проверил разрешения на все папки, и все они выглядят нормально. Не допускается также нарушение прав; Visual Studio 2010 - единственная программа, которая касается этих файлов и папок. Почему это происходит?

4b9b3361

Ответ 1

То, что запрещает доступ к NuGet здесь, - это настройка конфигурации Visual Studio.

  • В VS, перейдите в Инструменты > Параметры.
  • Прокрутите вниз до диспетчера пакетов node.
  • Убедитесь, что флажок Разрешить NuGet загружать отсутствующие пакеты во время сборки.
  • Нажмите ОК.
  • Попробуйте восстановить свое решение.

Ответ 2

Ваше решение для клонирования может не проходить через разрешение "выполнить" windows для файла nuget.exe.

Если вы клонируете с помощью git clone в cygwin, а затем попытаетесь использовать визуальную студию для открытия и сборки, разрешение не будет правильно установлено для nuget.exe. "Линукс" этого не поддерживает исполняемые разрешения Windows. Если вы клонируете, используя что-то вроде git -extensions, вы можете избежать этой проблемы, поскольку она создана для окон и поддерживает разрешение на выполнение.

Ответ 3

Или в моем случае файл <solution root>\.nuget\nuget.exe поврежден.

  • Удалить <solution root>\.nuget\nuget.exe файл
  • (re) включить восстановление пакета NuGet (VS2012 menu = > "project" = > включить восстановление пакета nuget)

Ответ 4

Ошибка исполняемого бита не имеет ничего общего с Cygwin, Linux или другим.

Все, что вам нужно знать в теории

Обе системы Windows и Linux (и все Unixen) имеют концепцию исполняемых файлов программ, которые помечаются как таковые в файловой системе. Когда git проверяет дерево в рабочем пространстве, он записывает свои капли в виде файлов и устанавливает их permissions в соответствии с их "режимом", хранящимся в дереве.

"Режим" основан на режимах Unix, но более ограниченный, предположительно в интересах (есть только три режима: обычный файл, исполняемый файл и символическая ссылка). Реализация Windows не будет иметь проблем с ее использованием для установки прав на файлы NTFS соответственно.

Это должен быть конец истории. Исполняемые файлы помечены как исполняемые файлы в репозитории git и автоматически устанавливаются во всех пользовательских системах.

Привычки Visual Studio

Однако команда VS решила автоматически установить некоторые (все?) новые проверенные файлы как исполняемые, даже если они не помечены как таковые в репозитории. Звучит неплохо в теории, многие люди забывают или не понимают понятия "разрешения".

Я говорю "по-видимому", потому что это похоже на унаследованные разрешения. Может быть, у них не было реального намерения сделать это, и вместо этого забыл сами устанавливать соответствующие разрешения.

На практике это означает, что еще больше людей забывают и остаются забытыми, пока все используют Visual Studio исключительно для манипулирования репозиториями. Те, кто использует какой-либо другой инструмент (включая официальные команды git), не смогут выполнять программы из коробки, и им будет ошибочно сказано использовать Visual Studio вместо фактической маркировки файла как исполняемого файла в хранилище.

И наоборот, похоже, что не нет, файл автоматически устанавливается как исполняемый при использовании VS для проверки их из репозитория.

Существует некоторое voodoo, которое предотвращает обнаружение фактических разрешений git при настройке таким образом. Вероятно, это связано с наложением разрешений и специальными разрешениями. Используя панель "Безопасность прокси-сервера" для файла "Свойства" вместе с git исходным кодом, вы можете работать, если это функция или ошибка. (IMO, точка спорная, поскольку я считаю, что разрешения в рабочем пространстве должны совпадать с разрешениями в репозитории, которые они выполняют при использовании официальных команд git.)

Манипулирование разрешений вручную

Используя "Проводник" Windows, используйте окно "Свойства файла" и его панель "Безопасность". Используя Cygwin или любую другую среду Unix-y, используйте chmod.

Реальное исправление для пользователей Visual Studio

chmod +x .nuget/NuGet.exe

(В качестве альтернативы используйте Проводник для правильной установки разрешения на выполнение таким образом, чтобы git обнаружил его - как это делает chmod).

git должен обнаружить изменение и интерпретировать его как изменение режима. git diff дает:

diff --git a/.nuget/NuGet.exe b/.nuget/NuGet.exe
old mode 100644
new mode 100755

Теперь зафиксировать и нажмите его вверх по течению, чтобы никто другой не мог этого сделать.

В будущем попробуйте использовать официальную команду git clone или лучше изучите это, чтобы написать правильный отчет об ошибках тому, кто может исправить это разумным способом. Может быть, обе стороны должны что-то делать (git, возможно, потребуется более разумно унаследовать разрешения для Windows, а Visual Studio, возможно, потребуется более осторожно при настройке их при проверке).

Ответ 5

Убедитесь, что ваш файл .nuget\nuget.exe имеет исполняемые разрешения. При копировании вы могли бы изменить права собственности или разрешения.