Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 为什么VisualStudio在尝试使用NuGet软件包构建解决方案时会给出“拒绝访问,代码5”错误?_Asp.net_Visual Studio 2010_Visual Studio_Nuget - Fatal编程技术网

Asp.net 为什么VisualStudio在尝试使用NuGet软件包构建解决方案时会给出“拒绝访问,代码5”错误?

Asp.net 为什么VisualStudio在尝试使用NuGet软件包构建解决方案时会给出“拒绝访问,代码5”错误?,asp.net,visual-studio-2010,visual-studio,nuget,Asp.net,Visual Studio 2010,Visual Studio,Nuget,我正在尝试构建一个引用NuGet包的VisualStudio解决方案。我已经从别人的计算机上复制了解决方案(通过Git,但我不知道复制的方法在这里是否重要)。当我尝试构建解决方案时,我一直收到以下命令: Error 3 The command ""D:\Custom Work\MySolution\Project\.nuget\nuget.exe" install "D:\Custom Work\MySolution\Project\AAIA.Model\packages.config"

我正在尝试构建一个引用NuGet包的VisualStudio解决方案。我已经从别人的计算机上复制了解决方案(通过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是唯一接触这些文件和文件夹的程序。为什么会发生这种情况?

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

  • 在VS中,转到工具>选项
  • 向下滚动到包管理器节点
  • 确保选中了“允许NuGet在构建期间下载丢失的软件包”
  • 单击确定
  • 尝试重建您的解决方案
  • 或者在我的例子中,
    \.nuget\nuget.exe
    文件已损坏

  • 删除
    \.nuget\nuget.exe
    文件
  • (re)启用NuGet包还原(VS2012菜单=>“项目”=>启用NuGet包还原)

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

    您的克隆解决方案可能没有为nuget.exe文件传递windows“执行”权限


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

    可执行位问题与Cygwin、Linux或其他无关

    理论上你需要知道的一切 Windows和Linux(以及所有Unixen)都有可执行程序文件的概念,这些文件在文件系统上被标记为可执行程序文件。当git在工作空间中签出一棵树时,它将其blob作为文件写入,并根据树对象中存储的“模式”设置blob

    “模式”基于但可能是为了便于移植(只有三种模式:普通文件、可执行文件和符号链接)。Windows实现在使用它进行相应设置时不会遇到问题

    故事到此结束。可执行文件在git存储库中标记为可执行文件,并在所有用户系统上自动设置为可执行文件

    VisualStudio怪癖 然而,VS团队显然决定自动将一些(全部?)新签出的文件设置为可执行文件,即使它们在存储库中没有标记为可执行文件。理论上听起来不错,许多人忘记或不真正理解“权限”的概念

    我之所以说“显然”,是因为它似乎与继承的权限有关。这可能是因为他们没有真正的意图这样做,而是忘记了自己设置适当的权限

    在实践中,这意味着更多的人忘记并保持健忘状态,只要他们全部使用VisualStudio专门操作存储库。那些使用任何其他工具(包括官方git命令)的人将无法开箱即用地执行程序,并且会被错误地告知使用visualstudio,而不是在存储库中将文件标记为可执行文件

    相反,当使用VS将文件从存储库中签出时,似乎没有办法不将文件自动设置为可执行文件

    在以这种方式设置时,有一些巫毒阻止git检测实际权限。这可能与权限继承和特殊权限有关。使用文件资源管理器的文件属性安全窗格以及git的源代码,您可能能够确定这是一个特性还是一个bug。(在我看来,这一点是没有意义的,因为我认为工作空间中的权限应该与存储库中的权限相匹配,而使用正式的git命令时就是这样做的。)

    手动操作权限 使用Windows的文件资源管理器,使用“文件属性”窗口及其安全窗格。使用Cygwin或任何其他Unix-y环境,请使用
    chmod

    VisualStudio用户的真正解决方案
    chmod+x.nuget/nuget.exe
    
    (或者使用文件资源管理器以git检测的方式正确设置可执行权限,就像
    chmod
    那样。)

    git应该检测到更改并将其解释为模式更改<代码>吉特差异收益率:

    diff--git a/.nuget/nuget.exe b/.nuget/nuget.exe
    旧模式100644
    新模式100755
    
    现在提交并将其推到上游,以便其他人不必这样做


    将来,尝试使用官方的
    git clone
    命令,或者更好地对此进行研究,以便为任何能够以理智的方式修复此问题的人编写正确的错误报告。这可能是双方都有事情要做(git可能需要对Windows上继承的权限更聪明一些,Visual Studio可能需要在签出时更小心地设置这些权限)。

    我正要放弃,辞去我的工作,把自己送进精神病院。然后我看到了这个帖子。谢谢,+1这正是我的问题。谢谢我也有同样的问题。我用SourceTree进行了克隆,问题自动解决了。实际上,Cygwin和其他人在AFAICT上处理Windows权限很好,即使在那种环境下运行,官方的git命令也是如此。真正的原因似乎是BLOB在存储库本身中没有标记为可执行文件,而一些克隆解决方案却将它们设置为可执行文件,即使它们不是(可能是错误的)。因此,如果维护人员都使用相同的工具,即使这些工具看起来是错误的,他们仍然没有意识到这个问题