28 votes

System.Reflection.Assembly.LoadFile Locks File

Je suis le chargement d'une DLL par le Système.De la réflexion.De l'assemblée.LoadFile et de réfléchir sur ses membres dans un plugin-esque système. J'ai besoin d'être en mesure de mettre à jour ou remplacer ces DLL lorsque le système est en cours d'exécution, mais il semble que, après l'appel Système.De la réflexion.De l'assemblée.LoadFile le fichier est verrouillé par la suite.
Personne ne sait d'une façon de déverrouiller le fichier?
J'ai lu à propos du chargement du fichier dans un autre domaine d'application? est-il des pièges à cette approche?

54voto

Pondidum Points 6541

Si vous utilisez ce:

 System.Reflection.Assembly.Load(System.IO.File.ReadAllBytes(path))

Il ne sera pas verrouiller le fichier.

Modifier


Bien que cela fonctionne, il n'est pas la meilleure solution, mais la meilleure façon de le faire est beaucoup plus complexe (trop pour il suffit de coller tout le code ici pour ça).

J'ai créé un dépôt sur Github ici, avec tout le code pour faire cela correctement:

Chargement des Assemblages sans Verrouillage en utilisant l'Ombre de la Copie.

0voto

Sven Hecht Points 892

Utilisez Microsoft.Cci inclus dans Microsoft FxCop

Exemple pour la version 1.35:

 using Microsoft.Cci;
// [...]
AssemblyNode assembly = AssemblyNode.GetAssembly(path);
 

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