2010-03-10 7 views
1

J'essaie de charger une application gérée mixte compilée et ciblée pour Framework 3.5 dans le CLR 4.0.Chargement d'une application C++/CLI 3.5 compilée dans .NET 4.0

Nous avons un fichier .config à côté du .exe où j'ai ajouté ce noeud:

<?xml version="1.0"?> 
<configuration> 
<startup> 
    <supportedRuntime version="v4.0.21006" /> 
</startup> 

Malheureusement, l'application se bloque sur le démarrage avec un callstack méchant. Est-ce que quelqu'un au courant peut confirmer qu'une application gérée mixte (.exe est C++/CLI) ne se chargera pas dans 4.0 si elle a été compilée pour 3.5?

Je regarde une vidéo Channel9 sur l'hébergement CLR côte à côte, et l'un des développeurs semble impliquer que ce soit le cas:

http://channel9.msdn.com/shows/Going+Deep/CLR-4-Side-by-Side-In-Process-What-How-Why/

Merci!

Répondre

4

Vous devez définir useLegacyV2RuntimeActivationPolicy si vous voulez charger un CLR 2 (.NET 3.5) l'assemblage en mode mixte dans un processus CLR 4:

<?xml version="1.0"?> 
<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
    </startup> 
</configuration> 

Sans cela, vous obtiendrez une exception désagréable.

+0

Génial, c'était mon problème et cela fonctionne pour moi. Merci! – cunningdave

0

Vous devriez pouvoir exécuter 3.5 et 4.0 dans le même processus. Cependant, forcer l'application à utiliser 4.0 au lieu de 3.5 ne semble pas possible.

Qu'essayez-vous d'accomplir?

+0

CLR 4 permet aux applications CLR 2 (.NET 3.5) et CLR 4 (.NET 4) d'être exécutées dans le même processus. Cependant, les assemblages en mode mixte nécessitent un soin particulier. –

+0

J'aimerais tout simplement pouvoir essayer notre application sur .NET 4.0 sans avoir à modifier beaucoup de fichiers .vcproj et .csproj! Dans un monde idéal, je pouvais nous voir activer .NET 4.0 dans notre application après la publication en mettant simplement à jour le fichier .config - et en supposant que rien ne se passe mal. Mais à ce stade, je ne suis même pas capable de charger l'application, même si je "opt-in". Je me demandais si quelqu'un d'autre avait de la chance. – cunningdave

+0

@Reed: Avoir une application .NET 3.5, vous pouvez maintenant charger des plugins qui utilisent 4. Ou vous pouvez charger des plugins nécessitant les deux versions dans la même application native. Mais ce n'est certainement pas la même chose que de forcer un code à fonctionner sous une version différente du CLR que ce qui a été écrit, en fait c'est exactement le contraire. –

Questions connexes