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

时间:2012-10-04 00:12:11

标签: 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.

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

5 个答案:

答案 0 :(得分:24)

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

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

答案 1 :(得分:17)

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

  1. 删除<solution root>\.nuget\nuget.exe文件
  2. (重新)启用NuGet包恢复(VS2012 menu =&gt;“project”=&gt;启用nuget包恢复)

答案 2 :(得分:7)

可执行位问题与Cygwin,Linux或其它无关。

理论上你需要知道的所有

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

“模式”基于Unix modes,但是more limited,可能是为了便于携带(只有三种模式:普通文件,可执行文件和符号链接)。 Windows实现使用它来相应地设置NTFS file permissions没有问题。

这应该是故事的结尾。可执行文件在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

(或者使用文件资源管理器以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可能需要更加小心。)

答案 3 :(得分:4)

确保您的.nuget\nuget.exe文件具有可执行权限。通过复制,您可能已经更改了所有权或权限。

答案 4 :(得分:3)

这里拒绝访问NuGet的是Visual Studio配置设置。

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