在尝试使用NuGet包构建解决方案时,为什么Visual Studio会拒绝访问,代码5错误?

Pau*_*ust 13 asp.net visual-studio-2010 visual-studio nuget

我正在尝试构建一个引用NuGet包的Visual Studio解决方案.我从其他人的计算机上复制了解决方案(通过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.
Run Code Online (Sandbox Code Playgroud)

我检查了所有文件夹的权限,它们似乎都很好.也没有共享违规; Visual Studio 2010是唯一触及这些文件和文件夹的程序.为什么会这样?

Car*_*omp 24

您的克隆解决方案可能无法传递nuget.exe文件的Windows'执行'权限.

如果您在cygwin中使用git clone进行克隆,然后尝试使用visual studio进行打开和构建,则不会为nuget.exe正确设置权限.它的'linux'不支持windows的可执行权限.如果使用git-extensions之类的东西进行克隆,则可以避免此问题,因为它是为windows构建的并支持可执行权限.

  • 我准备放弃,辞掉工作,并将自己检查成庇护所.然后我看到了这篇文章.谢谢,+ 1 (9认同)
  • "chmod + x nuget.exe"将修复它.无需在cygwin中放弃git clone. (4认同)

Dee*_*101 17

或者在我的情况下<solution root>\.nuget\nuget.exe文件已损坏.

  1. 删除<solution root>\.nuget\nuget.exe文件
  2. (重新)启用NuGet包恢复(VS2012菜单=>"项目"=>启用nuget包恢复)


tne*_*tne 7

可执行位问题与Cygwin,Linux或其他方面无关.

理论上你需要知道的一切

Windows和Linux(以及所有Unixen)都有可执行程序文件的概念,这些文件在文件系统上被标记.当git检出工作空间中的树时,它会将其blob写为文件,并根据存储在树对象中的"模式" 设置其权限.

"模式"基于Unix模式更受限制,可能是为了便于携带(只有三种模式:普通文件,可执行文件和符号链接).Windows实现使用它来相应地设置NTFS文件权限没有问题.

这应该是故事的结尾.可执行文件在git存储库中标记为可执行文件,并在所有用户系统上自动设置.

Visual Studio怪癖

但是,VS团队显然决定自动将一些(所有?)新签出的文件设置为可执行文件,即使它们未在存储库中标记为可执行文件也是如此.在理论上听起来不错,很多人忘记或者不太了解"权限"的概念.

我说"显然"因为它似乎与继承权限有关.可能是他们没有真正的意图去做,而是忘了自己设置适当的权限.

实际上,这意味着只要他们全部使用Visual Studio来操纵存储库,就会有更多人忘记并保持不经意.使用任何其他工具(包括官方git命令)的人将无法立即执行程序,并且会被错误地告知使用Visual Studio而不是实际将文件标记为存储库中的可执行文件.

相反,有貌似没有办法具有使用VS检查出来的仓库后,自动设置为可执行文件.

有一些伏都教可以防止git以这种方式设置时检测实际权限.这可能与权限继承和特殊权限有关.使用文件资源管理器的安全窗格获取文件的属性以及git的源代码,如果这是一个功能或错误,您可能能够解决问题.(IMO,我认为工作空间中的权限应该与存储库中的权限相匹配,这是他们使用官方git命令时的权限.)

手动操作权限

使用Windows的文件资源管理器,使用文件属性窗口及其安全窗格.使用Cygwin或任何其他Unix-y环境,请使用chmod.

Visual Studio用户的真正修复

chmod +x .nuget/NuGet.exe
Run Code Online (Sandbox Code Playgroud)

(或者使用文件资源管理器以git检测到它的方式正确设置可执行权限 - 就像chmod那样.)

git应检测更改并将其解释为模式更改.git diff收益率:

diff --git a/.nuget/NuGet.exe b/.nuget/NuGet.exe
old mode 100644
new mode 100755
Run Code Online (Sandbox Code Playgroud)

现在提交它并将其推送到上游,以便其他人不必这样做.

在将来,尝试使用官方git clone命令或者更好地研究这个,以便为能够以理智的方式修复此问题的人编写适当的错误报告.可能双方都有事要做(git可能需要更聪明地了解Windows上的继承权限,并且在结帐时设置Visual Studio可能需要更加小心).


Pau*_*ust 3

此处拒绝访问 NuGet 的是 Visual Studio 配置设置。

  1. 在 VS 中,转到“工具”>“选项”
  2. 向下滚动到包管理器节点。
  3. 确保选中“允许 NuGet 在构建期间下载缺失的包” 。
  4. 单击“确定”
  5. 尝试重建您的解决方案。