85 votes

Est-il possible d'exécuter une application .net 4.5 sur XP?

Tout d'abord, j'ai lu les suivantes:

Donc, à partir du dernier point, je pense vraiment qu'il n'y a pas moyen de contourner cela, mais j'ai eu de voir si je pouvais obtenir une réponse définitive quant à mon équipe de mise à niveau à partir de la version 4.0 à 4.5. Cependant, nous avons à l'appui de XP....il n'est pas possible d'aller à 4.5 si nous voulons soutenir XP? La seule chose que je pouvais penser, c'est la création de deux solutions, mais ensuite, le code aurait à diverger si nous avons utilisé 4.5 caractéristiques. Donc, je suis à la recherche d'une incroyable solution de contournement que je ne pouvais pas trouver et d'autres peut-être le savez déjà :D???....

184voto

Hans Passant Points 475940

J'ai hésité à poster cette réponse, effectivement, il est techniquement possible, mais il ne fonctionne pas dans la pratique. Les numéros de version du CLR et le cadre de base des assemblages n'ont pas été modifiés dans la version 4.5. Vous avez encore la cible v4.0.30319 de la CLR et le cadre de l'assemblée numéros de version sont encore 4.0.0.0. La seule chose qui distingue le manifeste d'assembly quand vous le regardez avec un désassembleur comme ildasm.exe est la présence d'un [TargetFramework] attribut qui dit que 4,5 est nécessaire, qui devra être modifié. En réalité pas si facile, il est émis par le compilateur.

La plus grande différence n'est pas visible, Microsoft fait une longue souffrance changement dans le fichier exécutable de l'en-tête de l'assemblée. Qui indique quelle version de Windows le fichier exécutable qui est compatible avec. XP appartient à une génération précédente de Windows, a commencé avec Windows 2000. Leur numéro de version majeur est de 5. Vista a été le début de la génération actuelle, de grands numéro de version 6.

.NET compilateurs ont toujours spécifié le numéro de version minimale à 4.00, la version de Windows NT et Windows 9x. Vous pouvez voir cela en cours d'exécution dumpbin.exe /en-têtes, sur l'assemblée. Exemple de sortie ressemble à ceci:

OPTIONAL HEADER VALUES
             10B magic # (PE32)
            ...
            4.00 operating system version
            0.00 image version
            4.00 subsystem version              // <=== here!!
               0 Win32 version
            ...

Ce qui est nouveau .NET 4.5, c'est que les compilateurs du changement qui sous-système de version 6.00. Un changement qui n'était dû en grande partie à cause de Windows prête attention à ce nombre, au-delà de juste vérifier si il est assez petit. Il s'allume aussi appcompat fonctionnalités puisqu'elle suppose que le programme a été écrit pour fonctionner sur les anciennes versions de Windows. Ces caractéristiques causer des problèmes, en particulier la façon dont Windows se trouve à environ la taille d'une fenêtre en Aero, est gênante. Il s'arrête de mentir au sujet de la graisse frontières d'un Aéro fenêtre, quand il peut voir que le programme a été conçu pour fonctionner sur une version de Windows qui a Aero.

Vous pouvez modifier le numéro de version et le ramener à 4.00 en cours d'exécution Editbin.exe sur vos assemblées avec le /sous-système de l'option. Cette réponse montre un exemple de postbuild événement.

C'est toutefois sur l'endroit où les bonnes nouvelles se termine, un problème important est que .NET 4.5 n'est pas très compatible avec .NET 4.0. De loin le plus grand raccrocher, c'est que les classes ont été déplacés à partir d'un assemblage à l'autre. Plus particulièrement, cela s'est passé pour l' [Extension] attribut. Précédemment dans System.Core.dll il s'est déplacé à Mscorlib.dll dans .NET 4.5. C'est un kaboom sur XP si vous déclarez vos propres méthodes d'extension, votre programme dit de regarder dans Mscorlib pour l'attribut, activé par un [TypeForwardedTo] attribut dans la .NET 4.5 version du Système.Base de référence de l'assemblée. Mais il n'est pas là lorsque vous exécutez votre programme .NET 4.0

Et bien sûr, il n'y a rien qui vous aide à arrêter à l'aide de classes et de méthodes qui ne sont disponibles que sur .NET 4.0. Lorsque vous le faites, votre programme va échouer avec un TypeLoadException ou MissingMethodException lorsqu'il est exécuté sur 4.0

Juste cible 4.0 et tous ces problèmes disparaissent. Ou briser cette impasse et arrêter le support de XP, une décision d'affaires que les programmeurs ne font souvent, mais nous pouvons certainement encourager en pointant du doigt les tracas qu'il est à l'origine. Il y a bien sûr un non-zéro coût d'avoir à aider les anciens systèmes d'exploitation, juste de l'effort de test est important. Un coût qui n'est pas souvent reconnu par la direction, de compatibilité de Windows est légendaire, sauf s'il est indiqué. Avant que le coût pour le client et ils ont tendance à prendre la bonne décision beaucoup plus rapide :) Mais nous ne pouvons pas vous aider avec ça.

21voto

leaf68 Points 1054

Malheureusement, non, vous ne pouvez pas exécuter de 4,5 programmes sur XP.

Et le message de cette page de connexion:

Posté par Microsoft sur le 23/03/2012 à 10:39
Merci pour le rapport. Ce comportement est par la conception .NET Framework 4.5 Beta. Le minimum systèmes d'exploitation supportés sont Windows 7, Windows Server 2008 SP2 et Windows Server 2008 R2 SP1. Windows XP n'est pas pris en charge système d'exploitation pour la version Bêta.

7voto

luiseduardohd Points 47

Essayez mono:

http://www.go-mono.com/mono-downloads/download.html

Ce téléchargement fonctionne sur toutes les versions de Windows XP, 2003, Vista et Windows 7.

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