2015-07-27 3 views
0

J'utilise CodeDOM pour générer dynamiquement des classes. Je spécifie l'assembly de sortie afin qu'un fichier .dll soit créé avec le nom de classe. Cependant, ces classes devront être mises à jour avec le même nom de classe, donc la classe sera mise à jour alors que le fichier .dll ne sera pas mis à jour (puisqu'il ne peut pas remplacer le fichier .dll précédent). Je me demande s'il existe un moyen d'appeler une méthode qui va supprimer ce fichier .dll, puis quand je générerai la nouvelle classe, le nouveau fichier .dll apparaîtra. Je sais que je pourrais utiliser des domaines d'application, mais le problème est que j'ai besoin de mettre à jour les cours fréquemment et je pense que la performance va souffrir beaucoup.Existe-t-il un moyen de supprimer un fichier .dll sans utiliser de domaines d'application distincts?

+2

Utilisez plutôt Roslyn pour compiler en mémoire. – SLaks

+2

Si vous devez effectuer des mises à jour fréquentes, pourquoi enregistrez-vous la DLL sur le disque en premier lieu? .NET est heureux d'avoir un assemblage de mémoire uniquement pour les cas comme celui-ci. –

+0

Le coût d'un domaine d'application doit être insignifiant par rapport au coût de génération de code, de compilation et d'écriture de la DLL sur le disque. –

Répondre

2

Vous pouvez supprimer/recréer la DLL si et seulement si ce fichier DLL n'est pas actuellement ouvert. Il est ouvert si un ou plusieurs domaines d'applications ont le code DLL chargé dans le domaine.

Il n'existe aucune fonction permettant de décharger une DLL à partir d'un domaine d'application. Vous devez décharger le domaine de l'application pour décharger les DLL qu'il référence.

MISE À JOUR

Je ne savais pas de la capacité de Roslyn de compiler en mémoire par suggestion de @SLaks. Si vous n'êtes pas lié à une DLL physique, jetez un oeil à this article.