为什么ExecutionPolicy行为因Visual Studio中的项目而异?

时间:2012-05-04 22:41:55

标签: visual-studio-2010 nuget

我在特定的PC上使用NuGet已经有一段时间了。现在,我在VS2010中创建了一个新项目(如果重要的话,它是使用单页应用程序模板的MVC 4 Beta项目)。当我选择

工具/库包管理器/包管理器控制台

控制台窗口打开但显示错误:

  

文件C:\ Program Files(x86)\ Microsoft Visual Studio   10.0 \ Common7 \ IDE \ Extensions \ Microsoft Corporation \ NuGet Package Manager \ 1.7.30402.9028 \ Modules \ NuGet \ profile.ps1无法加载   因为在此系统上禁用了脚本的执行。请   有关更多详细信息,请参阅“get-help about_signing”。

但是,其他项目仍然可以打开并使用Package Manager控制台。

在每种情况下,VS2010都以同一个用户身份运行。

如果我打开命令提示符(使用运行VS2010的同一帐户),请启动PowerShell,然后输入命令

  

GET-ExecutionPolicy

PowerShell返回

  

受限

我基于Scott Hanselman blog的理解是,如果ExecutionPolicy受到限制,脚本根本不应该运行。

为什么现有项目能够使用套件管理器控制台,而新版本不是?

更新:将ExecutionPolicy更改为AllSigned 重新启动VS2010解决了当前的问题,但我的主要问题是为什么其他项目能够绕过已建立的ExecutionPolicy。 VS2010 以管理员身份运行。

8 个答案:

答案 0 :(得分:123)

我遇到了同样的问题并通过以下方式解决了这个问题:

  • 以管理员身份打开Powershell
  • 输入以下命令“Set-ExecutionPolicy RemoteSigned”
  • 重新启动Visual Studio,并且程序包管理器控制台按预期工作

值得注意的是,Powershell会给你一个警告

“执行策略有助于保护您免受不信任的脚本的影响。更改执行策略可能会使您面临about_Execution_Policies帮助主题中描述的安全风险。是否要更改执行策略? ?“

应该小心启用此功能,并应阅读有关安全风险的帮助主题中的更多信息。

答案 1 :(得分:31)

除了Murries' answer之外,我发现jellonek's post(在另一个主题上)很有帮助。您可能必须更改不同版本的PowerShell的权限(32位和64位版本需要单独的权限)。

来自How to Tell if PowerShell is 32-bit or 64-bit

  • 64位PowerShell路径:C:\ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe
  • 32位PowerShell路径:C:\ Windows \ SysWOW64 \ WindowsPowerShell \ v1.0 \ powershell.exe

此外,BOTH这些应该有效:

  • Set-ExecutionPolicy RemoteSigned
  • Set-ExecutionPolicy Unrestricted

答案 2 :(得分:7)

解决此问题的另一种方法是将Regedit文件与以下内容合并:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell]
"ExecutionPolicy"="Unrestricted"


[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell]
"ExecutionPolicy"="Unrestricted"

(创建一个名为NuGetPowerShellFix.txt的文本文件,将上面的内容复制粘贴到其中,重命名为NuGetPowerShellFix.reg,然后运行。)


合并上述文件后,重新启动Visual Studio。

答案 3 :(得分:6)

如果您在Visual Studio 2013中使用NuGet并遇到这个恼人的错误,请转到工具| NuGet包管理器|包管理器设置,然后单击"清除包缓存。"重新启动Visual Studio。我知道有多种解决方案,所以这是另一种尝试。

答案 4 :(得分:3)

我间歇性地遇到了这个问题。我刚刚遇到它并遇到了这个问题。在我的最新案例中,我意识到我曾两次打开VS 2013(这通常不是问题,我一直这样做)。由于似乎修复它的其他人的唯一共同主题在某种程度上与要求管理员权限有关,我给了它一个镜头并关闭了VS的两个实例并在新实例中重新打开了我的解决方案。跑了nuget安装,它没有任何障碍。

基于此,我认为这是一个导致此虚假错误的文件权限问题。类似于Windows在调试会话之后锁定bin目录中的文件,并且不允许您编译解决方案。

答案 5 :(得分:2)

您可以通过不以管理员身份运行Visual Studio来解决此问题。

不同的原因,相同的错误信息;对于遇到这个问题的人来说可能会有帮助。

答案 6 :(得分:1)

由于我们需要在我们网络中的远程服务器上的共享上创建一个项目,并遇到类似的问题,这是有效的:

  • 将共享映射为网络驱动器,比如R :(但我想如果没有这种映射也可以工作)
  • 打开互联网选项&gt;安全&gt; <本地内联网>网站&gt;高级(通过IE或控制面板)
  • 添加“R:”或“file://server.domain.xy”(重新打开对话框后,前者会自动转为后者)
  • 运行x86 PowerShell可执行文件并执行“S​​et-ExecutionPolicy RemoteSigned”

一旦我做了所有的事情,Visual Studio在再次打开解决方案时没有抱怨项目处于不受信任的位置,并且它成功运行了创建新MVC应用程序时自动安装的软件包的所有PowerShell脚本

答案 7 :(得分:0)

我现在遇到这个问题,我认为对我来说简单易用的是我只需要重新启动visual studio 2013并以管理员身份运行它......为我快速工作。