Quelque chose comme ça devrait le faire. Il suffit de récupérer la valeur du registre
Pour .NET 1-4 :
Framework
est la plus haute version installée, SP
est le service pack pour 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));
Pour .NET 4.5 et plus (de documentation officielle ) :
using System;
using Microsoft.Win32;
...
private static void Get45or451FromRegistry()
{
using (RegistryKey ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey("SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full\\")) {
int releaseKey = Convert.ToInt32(ndpKey.GetValue("Release"));
if (true) {
Console.WriteLine("Version: " + CheckFor45DotVersion(releaseKey));
}
}
}
...
// Checking the version using >= will enable forward compatibility,
// however you should always compile your code on newer versions of
// the framework to ensure your app works the same.
private static string CheckFor45DotVersion(int releaseKey)
{
if (releaseKey >= 528040) {
return "4.8 or later";
}
if (releaseKey >= 461808) {
return "4.7.2 or later";
}
if (releaseKey >= 461308) {
return "4.7.1 or later";
}
if (releaseKey >= 460798) {
return "4.7 or later";
}
if (releaseKey >= 394802) {
return "4.6.2 or later";
}
if (releaseKey >= 394254) {
return "4.6.1 or later";
}
if (releaseKey >= 393295) {
return "4.6 or later";
}
if (releaseKey >= 393273) {
return "4.6 RC or later";
}
if ((releaseKey >= 379893)) {
return "4.5.2 or later";
}
if ((releaseKey >= 378675)) {
return "4.5.1 or later";
}
if ((releaseKey >= 378389)) {
return "4.5 or later";
}
// This line should never execute. A non-null release key should mean
// that 4.5 or later is installed.
return "No 4.5 or later version detected";
}
2 votes
Sans autre forme de procès,
Environment.Version()
ne renvoie probablement que la version du CLR.0 votes
Environment.Version() donne
2.0
même s'il fonctionne avec3.5
0 votes
J'ai utilisé l'approche mentionnée dans stackoverflow.com/questions/15128426/
1 votes
Comment : Déterminer quelles versions de .NET Framework sont installées (comprend également la solution programmatique)
2 votes
@Lijo, pour .NET 3.5, la version CLR est en fait 2.0.
0 votes
Mise à jour 2015 : La réponse acceptée ne permet pas de distinguer entre 4.0, 4.5, 4.5.1, 4.5.2 et 4.6. Mettons à jour les réponses.
0 votes
Cela pourrait être utile pour ceux qui veulent écrire leur propre implémentation : support.microsoft.com/fr/us/kb/318785
0 votes
Toutes les réponses qui reposent sur la vérification des valeurs du registre sont fausses. Pour commencer, cela ne fonctionnera pas sur les systèmes autres que Windows. Et le registre ne vous dit pas quelle version du Framework (pas le CLR) vous utilisez réellement. La version 4.5 peut être installée, mais vous pouvez toujours utiliser la version 4.0.