42 votes

Existe-t-il un moyen simple de vérifier la version de .NET Framework à l'aide de C #?

Le problème est que je dois savoir s'il s'agit de la version 3.5 SP 1, Environment.Version() ne renvoie que 2.0.50727.3053 .

J'ai trouvé cette solution mais je pense que cela prendra beaucoup plus de temps que ça ne vaut la peine, alors je cherche une solution plus simple. Aucune suggestion?

Merci d'avance

43voto

Factor Mystic Points 12465

Quelque chose comme ça devrait le faire. Il suffit de saisir la valeur du registre

Edit : mis à jour un peu; Framework est la version la plus récente installée, SP est le service pack de cette version.

 RegistryKey installed_versions = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP");
string[] version_names = installed_versions.GetSubKeyNames();
//version names start with 'v', eg, 'v3.5' which needs to be trimmed off before conversion
double Framework = Convert.ToDouble(version_names[version_names.Length - 1].Remove(0, 1), CultureInfo.InvariantCulture);
int SP = Convert.ToInt32(installed_versions.OpenSubKey(version_names[version_names.Length - 1]).GetValue("SP", 0));
 

7voto

quillbreaker Points 2843

Environment.Version() donne la réponse correcte pour une question différente. La même version du CLR est utilisée dans .net 2.0, 3 et 3.5. Je suppose que vous pouvez vérifier dans le GAC les bibliothèques ajoutées dans chacune de ces versions ultérieures.

3voto

Darin Dimitrov Points 528142

Autant que je sache, il n’existe dans le cadre aucune méthode intégrée vous permettant de le faire. Vous pouvez consulter ce message pour une suggestion sur la détermination de la version de l'infrastructure en lisant les valeurs de registre Windows.

2voto

Cecil Has a Name Points 3385

Sans enquête supplémentaire, Environment.Version() ne fait que renvoyer la version du CLR.

2voto

pasx Points 21

Merci pour ce post qui a été très utile. J'ai dû le modifier un peu afin de vérifier le framework 2.0, car la clé de registre ne peut pas être convertie immédiatement en double. Voici le code:

 string[] version_names = rk.GetSubKeyNames();
//version names start with 'v', eg, 'v3.5'
//we also need to take care of strings like v2.0.50727...
string sCurrent = version_names[version_names.Length - 1].Remove(0, 1);
if (sCurrent.LastIndexOf(".") > 1)
{
    string[] sSplit = sCurrent.Split('.');
    sCurrent = sSplit[0] + "." + sSplit[1] + sSplit[2];
}
double dCurrent = Convert.ToDouble(sCurrent, System.Globalization.CultureInfo.InvariantCulture);
double dExpected = Convert.ToDouble(sExpectedVersion);
if (dCurrent >= dExpected)
 

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: