2008-12-05 5 views

Répondre

2

Vous pouvez éventuellement utiliser Assembly.ImageRuntimeVersion. Selon le MSDN docs, par défaut, il est défini sur la version du CLR utilisée pour générer l'assembly. Bien que apparemment, il peut être changé.

C'est une propriété de chaîne, donc vous devriez faire une comparaison de chaînes.

+1

Donc, probablement, cela permettrait de distinguer entre 1.1 et 2.0, mais rien de plus que cela (jusqu'à ce que 4.0 sort)? –

+0

Cela semble être le cas. J'ai un assemblage récemment construit ici rapportant "v2.0.50727" ... C'est avec 3.5 SP1 pas de numéro de build info. – ckramer

1

Je ne crois pas. Il est relativement difficile de créer une application .NET 1.1 avec .NET 2.0, bien que ce ne soit pas impossible - donc si vous avez coché la version de mscorlib référencée, vous pouvez obtenir une image "probablement exacte" de la version 1.1 ou 2.0 +.

Vous devrez également vous demander quelle réponse vous souhaitiez lors de l'utilisation de VS2008 mais si vous compiliez une cible de .NET 2.0. Êtes-vous réellement intéressé par la version du compilateur utilisée? Il peut y avoir des différences caractéristiques entre la sortie de différentes versions du compilateur. Des fonctionnalités supplémentaires peuvent également l'offrir: si l'application a été écrite en C# ciblant .NET 2.0, vous pouvez trouver des types qui semblent avoir été générés à partir de types anonymes dans le code source. Bien sûr, cela dépend de la fonctionnalité de langue utilisée en premier lieu ...

Pourquoi avez-vous besoin de savoir cela, par intérêt?

0

Vous pouvez utiliser System.Reflection pour vérifier le numéro de version des assemblys référencés par le système.

using System; 
using System.Reflection; 

class Module1 
{ 

    public static void CheckReferencedAssemblies(string assemblyPath) 
    { 
     Assembly a = Assembly.Load(assemblyPath); 

     foreach (AssemblyName an in a.GetReferencedAssemblies()) 
     { 
      // Check an.Version for System assemblies 
     } 
    } 
} 

Modifier: Je ne suis pas sûr d'avoir compris ce que vous voulez.

0

Une partie du problème avec votre question est que .NET a fait un très bon travail de ne pas changer le code à mesure que les versions augmentent. J'entends par là que le mscorlib sera le même dans .NET 4.0 que dans .NET 1.1. Mais je suis d'accord avec la question implicite de Jon Skeet: Pourquoi avez-vous besoin de savoir? Est-ce purement par intérêt, parce que je pense que cela ne devrait pas avoir d'importance pour vous.

1

Pour les frameworks < 2.0 et framework 4.0, la version du mscorlib référencé vous donnera la version framework. Pour les frameworks 2.0 à 3.5, vérifiez la présence de toute référence à System.Core ou à l'un des autres assemblages 3.5+, et à PresentationCore ou à tout autre assemblage 3.0+. Si vous n'en avez aucun, il devrait cibler 2.0.

Questions connexes