2012-05-04 20 views
65

我已經在一臺特定的PC上使用NuGet一段時間了。現在,我在VS2010中創建了一個新項目(如果重要的話,這是一個使用單頁面應用程序模板的MVC 4 Beta項目)。當我選擇爲什麼Visual Studio中的項目的ExecutionPolicy行爲有所不同?

工具/庫軟件包管理器/包管理器控制檯

控制檯窗口打開,但顯示錯誤:

File 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 cannot be loaded because the execution of scripts is disabled on this system. Please see "get-help about_signing" for more details.

然而,其他項目仍可以打開和使用程序包管理器控制檯。

在每種情況下,VS2010都以同一用戶身份運行。

如果我打開一個命令提示符(使用在其VS2010運行相同的帳戶),開始的PowerShell,並輸入命令

Get-ExecutionPolicy

PowerShell會返回根據

Restricted

我的理解Scott Hanselman blog是如果ExecutionPolicy受限制,腳本不應該運行。

爲什麼現有項目能夠使用軟件包管理器控制檯,而新軟件包不是?

更新:在ExecutionPolicy更改到的AllSigned 重啓VS2010解決眼前的問題,但我的主要問題是,爲什麼其他項目能夠繞過既定ExecutionPolicy。 VS2010是而不是以管理員身份運行。

+0

NuGet程序包管理器控制檯將PowerShell的執行策略設置爲RemoteSigned,並將作用域設置爲Process,因此它隻影響Visual Studio。更改Visual Studio的策略不需要Visual Studio以管理員身份運行。您從命令行看到的執行策略不需要更改。在我的機器上,這個設置爲Restricted。然而這些都不能解釋爲什麼你的新項目會顯示這個錯誤,而現有的項目不會。 –

+0

如果非管理用戶無論如何都可以基於每個進程更改策略,那麼在機器範圍內設置策略有什麼用處? –

+0

組策略設置可以防止您覆蓋當前進程的設置,但本地計算機設置不會。請參閱以下msdn帖子中的執行策略優先級部分 - http://technet.microsoft.com/en-us/library/dd347641.aspx –

回答

122

我經歷了同樣的問題,並解決它由:

  • 打開PowerShell的管理員身份
  • 輸入以下命令「set-ExecutionPolicy RemoteSigned就是」
  • 重新啓動Visual Studio和包管理器控制檯工作如預期的那樣

不過要注意的是,Powershell會給你一個警告

「執行策略有助於保護您免受不信任的腳本的攻擊。更改執行策略可能會使您面臨about_Execution_Policies幫助主題中描述的安全風險。你想更改執行策略?」

而且應慎重啓用此功能,並應該閱讀有關安全隱患的幫助主題的更多信息。

+2

不錯,這個解釋起作用! –

+8

+1哦,是啊!這是Windows。我只需要重新啓動,直到它工作。 ;) – Nick

+0

我的身邊沒有需要重新啓動VS. –

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不受限制
+1

我試圖運行只是「Set-ExecutionPolicy RemoteSigned」,並沒有工作。我可以確認我也必須運行「Set-ExecutionPolicy Unrestricted」。 –

+2

+1我今天有史以來第一次遇到這個錯誤,我顯然只有我的powershell策略設置在2個powershell中的一個上......我剛剛注意到你有32位和64位在你的文章中翻轉了嗎?你有SysWow64 32位和System32 64位。這似乎倒退了。 –

+0

謝謝克里斯。我從鏈接的文章中複製它,並將它們翻轉過來。這已更新。 – cat5dev

7

另一種方式來解決,這是通過合併註冊表編輯器文件,內容如下:

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。

2

您可以通過不以管理員身份運行Visual Studio來解決此問題。

不同的原因,相同的錯誤信息;可能對遇到這個問題的人有幫助。

+0

它似乎確實提供了我的問題的答案。答案可以改爲:「您可以通過不以管理員身份運行Visual Studio來解決此問題。」 –

3

我也有這個間歇性的問題。我剛剛遇到它,並跑過這個線程。在我的最新案例中,我意識到我有VS 2013兩次開放(這通常不是問題,我一直都這樣做)。由於似乎修復它的唯一共同主題與需要管理員權限有直接關係,所以我給它一個鏡頭並關閉了VS的兩個實例,並在新實例中重新打開了我的解決方案。運行nuget安裝並且順利運行。

基於此,我認爲這是一個文件權限問題導致這種虛假​​錯誤。有點像在調試會話之後windows對bin目錄中的文件具有鎖定並且不允許您編譯解決方案時。

0

我現在有這個問題,我認爲對我來說很容易的是,我只需重新啓動Visual Studio 2013並以管理員身份運行它...爲我工作得很快。

1

因爲我們需要我們的網絡中的遠程服務器上創建共享上的項目,並跑進這裏類似的問題就是工作:

  • 份額映射爲網絡驅動器,說R:(但我猜想它也可以在沒有這個映射的情況下工作)
  • 打開Internet選項>安全>本地Intranet>站點>高級(通過IE或控制面板)
  • 添加「R:」或「file://server.domain。XY」(前者會自動一旦你重新打開對話框,變成了後者)
  • 運行的x86 PowerShell的可執行文件,並做‘SET-ExecutionPolicy RemoteSigned就是’

一旦我做過的一切Visual Studio中沒有抱怨當再次打開解決方案時,該項目位於不受信任的位置,併成功運行創建新MVC應用程序時自動安裝的所有PowerShell腳本。

6

如果您在Visual Studio中使用NuGet 2013,並得到這個惱人的錯誤,去工具| NuGet包管理器|軟件包管理器設置,然後單擊「清除軟件包緩存。」重新啓動Visual Studio。多種解決方案,所以這是另一個嘗試。

相關問題