J'ai installé la version de développement .NET 4.5 d'aperçu à partir de http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=27541, qui 'remplace' la version .NET 4.0.
Cependant, l'ancienne manière de détecter la version du framework .NET semble renvoyer 4.0 (plus précisément 4.0.30319.17020 sur mon PC), au lieu de 4.5 (sûrement probablement pour la compatibilité ascendante, ou?):
using System;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
var version = Environment.Version;
Console.WriteLine(version.ToString());
Console.ReadKey();
}
}
}
Comment puis-je détecter que mon code est vraiment exécuté par .NET 4.5?
0 votes
Lorsque vous installez .NET, il ne 'remplace' rien. Allez voir dans
C:\Windows\Microsoft.NET\Framework
et vous verrez un dossier pour chaque framework que vous avez installé. Si vous souhaitez modifier le framework sous lequel votre application est compilée, il vous suffit d'ouvrir les propriétés de votre Projet dans l'Explorateur de solutions, puis de sélectionner le framework correct dans la liste déroulante "Framework cible".13 votes
Il n'y a pas de "CLR 4.5", il utilise toujours la version CLR 4.0.30319.
3 votes
@tobias86: .NET 4.5 est différent. Il REMPLACE .NET 4.0 sur votre PC! :)
0 votes
@HansPassant: oui, c'est vrai, je veux dire ici .NET 4.5, merci :) Corrigé
6 votes
Eh bien, reliez les points, la dernière phrase de votre question est donc impossible à répondre. La seule chose logique à faire est de vérifier si la version 4.5 est installée. Si c'est le cas, il n'y a aucun moyen que la révision 4.0 exécute votre programme.
0 votes
Pourquoi diable vous importez de la version de l'environnement d'exécution? Il me semble que vous essayez de résoudre un problème de la mauvaise manière.
1 votes
HansPassant, CodyGray : supposons simplement que j'installe .NET 4.5 et maintenant je suis confus, est-ce que ça fonctionne vraiment ou y a-t-il eu un problème lors de l'installation et j'utilise toujours .NET 4.0 (pour les applications Windows et surtout les hôtes ASP.NET MVC). Je ne veux PAS faire de tests de performances de GC ou utiliser la "détection de fonctionnalités" (voir la réponse de Christian.K) pour savoir quel runtime exécute mon code. Beaucoup d'améliorations / nouvelles fonctionnalités sont introduites par .NET 4.5 et ça me paraît déroutant qu'il n'y ait aucun moyen de détecter que le code est exécuté par lui (pas pour détecter que v4.5 est installé, ce qui est trivial, mais qu'il fonctionne réellement!).
0 votes
Au fait, j'utilise également les "vérifications" suivantes :
var version = typeof(int).Assembly.GetName().Version; var version2 = System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion(); var version3 = typeof(int).Assembly.ImageRuntimeVersion;
- même résultat, c'est-à-dire 4.0.0.0 ou 4.0.30319 partout :)1 votes
@EvereQ Désolé de le dire, mais d'après le libellé de votre dernier commentaire ci-dessus, vous ne semblez toujours pas comprendre la différence entre .NET dans son ensemble (package), le CLR et/ou les bibliothèques du framework. Quoi qu'il en soit, j'ai ajouté quelques informations supplémentaires à ma réponse sur pourquoi je pense que ce que vous demandez n'est peut-être même pas possible ou souhaité.
0 votes
@Christian.K Je ne ferais pas de telles hypothèses à mon sujet, cependant merci de mettre à jour votre réponse. Pour vous montrer à quel point vous pouvez avoir tort avec moi et avec .NET 4.5 en général, veuillez répondre à ce qui suit : Que pensez-vous, le GC fait-il partie du CLR ou non ? Maintenant, lisez par exemple : blogs.microsoft.co.il/blogs/sasha/archive/2011/09/17/… Voyez combien d'améliorations ont été apportées au GC de .NET 4.5 ? Il est donc important dans CERTAINS scénarios de détecter quel exécuteur de code exécute votre code et cela n'a rien à voir avec les différences entre .NET dans son ensemble, le CLR et les bibliothèques du framework :)
2 votes
@EverQ Je n'essayais pas de te faire dire quelque chose que tu n'as pas dit ou de faire des suppositions (c'est pourquoi j'ai dit "tu ne semblais toujours pas..."). Si tu as pris offense, désolé. Quoi qu'il en soit, concernant ton exemple, tu peux constater que le nouveau CLR (celui qui apparemment est toujours v4.0 même s'il est livré avec .NET 4.5). Exemples ci-dessous.