web-dev-qa-db-fra.com

Pourquoi le comportement d'ExecutionPolicy varie-t-il d'un projet à l'autre dans Visual Studio?

J'utilise NuGet depuis un certain temps sur un PC particulier. Maintenant, j'ai créé un nouveau projet dans VS2010 (c'est un projet MVC 4 Beta utilisant le modèle d'application Single Page si cela importe). Quand je sélectionne

Outils/Library Package Manager/Package Manager Console

La fenêtre de la console s'ouvre mais affiche l'erreur:

Le fichier 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 ne peut pas être chargé car l'exécution des scripts est désactivée sur ce système. Veuillez consulter "obtenir de l'aide sur la signature" pour plus de détails.

Cependant, d'autres projets peuvent toujours ouvrir et utiliser la console du gestionnaire de packages.

Dans chaque cas, VS2010 fonctionne comme le même utilisateur.

Si j'ouvre une invite de commande (en utilisant le même compte sous lequel VS2010 s'exécute), démarrez PowerShell et entrez la commande

Get-ExecutionPolicy

Retour de PowerShell

Limité

Ma compréhension basée sur un blog Scott Hanselman est que les scripts ne devraient pas du tout s'exécuter si ExecutionPolicy est restreint.

Pourquoi les projets existants peuvent-ils utiliser la console du gestionnaire de packages alors qu'un nouveau ne l'est pas?

Mise à jour: Changer ExecutionPolicy en AllSigned et redémarrer VS2010 résout le problème immédiat, mais ma principale question est de savoir pourquoi les autres projets ont pu contourner l'ExecutionPolicy établie. VS2010 est pas exécuté en tant qu'administrateur.

65
Eric J.

J'ai rencontré le même problème et l'ai résolu en:

  • Ouverture de Powershell en tant qu'administrateur
  • Saisie de la commande suivante "Set-ExecutionPolicy RemoteSigned"
  • Redémarrez Visual Studio et la console du gestionnaire de packages a fonctionné comme prévu

Il est important de noter cependant que Powershell vous donnera un avertissement

"La stratégie d'exécution vous protège contre les scripts auxquels vous ne faites pas confiance. La modification de la stratégie d'exécution peut vous exposer aux risques de sécurité décrits dans la rubrique d'aide about_Execution_Policies. Voulez-vous changer la politique d'exécution? "

Vous devez également veiller à activer cette fonctionnalité et lire plus d'informations dans les rubriques d'aide sur les risques de sécurité.

123
Murries

En plus de réponse de Murries , j'ai trouvé le message de jellonek (sur un autre fil) utile. Vous devrez peut-être modifier les autorisations sur une version différente de PowerShell (les versions 32 bits et 64 bits nécessitent des autorisations distinctes).

De Comment savoir si PowerShell est 32 bits ou 64 bits :

  • Chemin PowerShell 64 bits: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
  • Chemin PowerShell 32 bits: C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe

En outre, LES DEUX devraient fonctionner:

  • Set-ExecutionPolicy RemoteSigned
  • Set-ExecutionPolicy Unrestricted
31
cat5dev

Une autre façon de résoudre ce problème consiste à fusionner un fichier Regedit avec le contenu suivant:

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"

(Créez un fichier texte appelé NuGetPowerShellFix.txt, copiez-collez-le dessus, renommez-le en NuGetPowerShellFix.reg, puis exécutez.)


Après avoir fusionné le fichier ci-dessus, redémarrez Visual Studio.

7
Danny Varod

Si vous utilisez NuGet dans Visual Studio 2013 et obtenez cette erreur gênante, accédez à Outils | Gestionnaire de packages NuGet | Paramètres du gestionnaire de packages et cliquez sur "Vider le cache des packages". Redémarrez Visual Studio. Je sais qu'il existe plusieurs solutions à cela, c'est donc une autre à essayer.

6
john c

J'ai également eu ce problème par intermittence. Je viens de le rencontrer à nouveau et j'ai parcouru ce fil. Dans mon dernier cas, j'ai réalisé que j'avais VS 2013 ouvert deux fois (ce qui n'est normalement pas un problème, je le fais tout le temps). Étant donné que le seul thème commun à d'autres qui semblait le résoudre était lié à des privilèges d'administrateur, je lui ai donné un coup de feu et fermé les deux instances de VS et rouvert ma solution dans une nouvelle instance. A exécuté l'installation de pépite et cela a fonctionné sans accroc.

Sur cette base, je pense que c'est un problème d'autorisation de fichier provoquant cette erreur parasite. Un peu comme lorsque Windows a un verrou sur un fichier dans le répertoire bin après une session de débogage et ne vous permettra pas de compiler la solution.

3
Gustyn

Vous pourrez peut-être résoudre ce problème en n'exécutant pas Visual Studio en tant qu'administrateur.

Cause différente, même message d'erreur; pourrait être utile pour quelqu'un qui rencontre celui-ci.

2
sargeMonkey

Puisque nous avions besoin de créer un projet sur un partage sur un serveur distant de notre réseau et que nous avons rencontré des problèmes similaires, voici ce qui a fonctionné:

  • mappez le partage en tant que lecteur réseau, dites R: (mais je suppose que cela fonctionnerait également sans ce mappage)
  • ouvrez les options Internet> Sécurité> Intranet local> Sites> Avancé (via IE ou panneau de configuration)
  • ajoutez "R:" ou "file: //server.domain.xy" (le premier deviendra automatiquement le second une fois que vous aurez rouvert la boîte de dialogue)
  • exécutez l'exécutable x86 PowerShell et effectuez "Set-ExecutionPolicy RemoteSigned"

Une fois que j'ai fait tout cela, Visual Studio ne s'est pas plaint que le projet se trouvait dans un emplacement non fiable lors de la réouverture de la solution, et il a réussi à exécuter tous les scripts PowerShell pour les packages qui s'installent automatiquement lors de la création d'une nouvelle application MVC.

1
Leak

J'ai ce problème maintenant, je pense que ce qui a fonctionné pour moi, c'est que je devais simplement redémarrer Visual Studio 2013 et l'exécuter en tant qu'administrateur ... a fonctionné rapidement pour moi.

0
Alexander Burias