2010-02-24 24 views
0

Existe-t-il un moyen de décharger le .NET AppDomain par défaut à partir d'une application non gérée? J'utilise un outil tiers appelé .NET Extender pour utiliser des assemblys .NET à partir de Visual FoxPro qui me permet d'héberger des contrôles .NET et également utiliser des classes et des méthodes .NET à partir d'un environnement FoxPro. Le problème que j'ai est que lors du débogage d'une application à partir de Visual FoxPro, il exécute le tout sous le fichier d'application principal vfp9.exe pour l'IDE et il apparaît que les poignées de mes assemblées managées ne sont pas libérées. Donc, quand je fais une modification à ces assemblys .NET et que je veux les mettre à jour, je dois fermer l'IDE VFP et le rouvrir, sinon je reçois une violation de partage lorsque je tente d'écraser les fichiers.Comment faire pour décharger le .NET AppDomain par défaut à partir d'une application non gérée

J'ai commencé à chercher des moyens de m'assurer que les contrôles sont éliminés, mais ensuite je suis tombé sur this article by Rick Strahl où il décrit fondamentalement que le problème est vraiment que le principal AppDomain n'est pas déchargé. Après avoir regardé les informations sur la façon de décharger l'AppDomain par défaut, je suis arrivé à la conclusion que ce n'est pas possible au moins à partir d'une application gérée mais est-ce possible pour une application non gérée. Ma pensée est que, juste parce qu'une application non gérée a utilisé une ressource. NET, elle ne devrait pas avoir à continuer à transporter les bagages AppDomain et Runtime.

+0

Je n'ai pas de preneur jusqu'à présent, j'ai donc posté cette question sur le forum MSDN. Je mettrai à jour ce post avec les réponses qui y sont données. http://social.msdn.microsoft.com/Forums/en-US/clr/thread/fae4e7ce-bc24-4db3-a2cf-b6b16be4d3ee – jpierson

Répondre

1

Cette question a été répondue sur le MSDN Forums et malheureusement il semble que ce n'est pas possible et qu'un processus doit être terminé pour libérer des ressources, y compris les domaines d'application. Cela est décrit dans la méthode d'interface documentation for the ICLRRuntimeHost.Stop où il est indiqué "Cette méthode ne libère pas de ressources sur l'hôte, ne décharge pas les domaines d'application ou ne détruit pas les threads.Vous devez terminer le processus pour libérer ces ressources."