2010-09-14 19 views
1

Depuis que nous avons commencé à mettre à niveau certains de nos projets .NET Framework 4.0, j'ai couru dans beaucoup de problèmes en ce qui concerne l'erreur suivante:Existe-t-il un moyen de décharger ou de recharger l'exécution actuellement chargée?

This assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded.

Il se passe maintenant avec notre application d'installation. Le programme d'installation parcourt une liste de DLL et installe ceux qui sont nécessaires sur une machine cible. Chaque assembly est chargé dans le contexte en utilisant

Assembly.LoadFile

Les premiers assemblages dans la file d'attente sont 3.5. Une fois que le programme d'installation récupère une DLL 4.0 et essaie de le charger à l'aide de Assembly.LoadFile, j'obtiens cette erreur. Il semble que le chargement de la première DLL définit le précédent pour lequel "runtime" est actuellement chargé.

Y a-t-il un moyen de décharger cette exécution actuellement chargée avant de traiter une DLL 4.0 afin d'éviter cette erreur?

Répondre

1

Cela dépendra de ce que CLR est l'exécutable qui charge les assemblages en cours d'exécution. S'il fonctionne sur CLR 2.0, vous ne pourrez pas charger un assembly .NET 4.0. Assurez-vous donc que si vous essayez de charger un assembly .NET 4.0, vous exécutez l'application sur CLR 4.0. Vous mentionnez l'application d'installation. Il y a une possibilité de fixer une exigence de conditions de lancement de .NET 4.0:

alt text


MISE À JOUR:

Vous pouvez également forcer votre exécutable à charger par le CLR 4.0 en mettant cela dans le fichier app.config:

<startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
</startup> 

Parce que le CLR 4.0 prend en charge le chargement des assemblages compilés contre les versions précédentes cela vous permettra de contourner le problème sans recompiler l'exécutable contre .NET 4.0.

+0

Droite. L'installateur que je mentionne est notre propre application exécutable personnalisée; pas un projet d'installation de solution d'installation. Pouvez-vous configurer les conditions de lancement sur n'importe quel exécutable? – topwik

+0

L'exécution actuelle à laquelle l'erreur fait référence, c'est l'exécution utilisée par l'application spécifique est-ce correct? – topwik

+1

Vous devez compiler cet exécutable contre .NET 4.0. En faisant cela, il fonctionnera automatiquement sous le CLR 4.0 (si disponible) et vous pourrez charger les assemblys compilés avec .NET 4.0. –