87 votes

Pouvez-vous supprimer une Ajoutée en PowerShell à nouveau?

Je suis actuellement à la rédaction d'une bibliothèque en C# et a été à l'aide de PowerShell pour tester rapidement à certaines occasions. Cependant, ce qui m'empêche de re-construire le projet en tant que PowerShell évidemment encore a la DLL ouvrir.

Est-il un moyen de décharger les DLL de nouveau après l'ajout de il avec Add-Type? La documentation ne semble pas avoir des indices sur qui et le candidat évident serait Remove-Type (qui n'existe pas – il n'y a qu'une seule commande de toute façon avec Type comme son nom). Ça devient lourd à proximité PowerShell et de faire tous les trucs de naviguer vers le répertoire de construction et en ajoutant le type de nouveau à chaque fois que je veux reconstruire.

73voto

x0n Points 26002

Comme le disent les autres, c'est une .NET comportement. Assemblées chargées dans un domaine d'application ne peut pas être déchargé. Seul le domaine d'application peut être déchargé, et powershell utilise un seul domaine d'application. J'ai blogué un peu à ce sujet il y a quelques années: http://www.nivot.org/2007/12/07/WhyAppDomainsAreNotAMagicBullet.aspx

Quand je test comme ça, j'ai l'habitude de garder une coquille ouvrir et utiliser un imbriquée shell pour faire les tests. démarrer powershell, cd bin emplacement puis "powershell" pour démarrer imbriquée shell (nouveau cours). "exit" pour recommencer, et exécuter "powershell" de nouveau.

55voto

Start-Automating Points 3953

- Je trouver la façon la plus simple de contourner ce problème est d'envelopper le Ajoutez-le Type et le code de test à l'intérieur d'une Start-Emploi. Start-Job va créer un processus d'arrière-plan, et le type sera téléchargé. Une fois que vous avez terminé, le processus va plus loin et vous êtes libre de réessayer.

Espérons que cela aide,

26voto

George Howarth Points 1364

Si votre assemblée n'a pas besoin d'un contexte de liaison , vous pouvez faire ceci:

$bytes = [System.IO.File]::ReadAllBytes("Path_To_Your_Dll.dll")
[System.Reflection.Assembly]::Load($bytes)

0voto

stej Points 14257

J'ai été confronté à un problème similaire. Il n'est pas possible de décharger un type/assemblage (c'est parce qu'il s'applique .NET framework).

Dans .NET, vous pouvez le résoudre s'il vous créer un nouveau domaine d'application (System.AppDomain) et de charger de l'assemblée dans ce domaine. Il est possible de décharger le domaine de l'application et de décharge toutes les dll en tant que bien.

Je n'ai pas encore essayé, parce que pour moi il est beaucoup plus simple pour fermer un onglet dans la Console et ouvrez-en un nouveau.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X