1. Synthèse des versions des composants du Framework .NET
Remplacement du Framework 4.0 par la version 4.5
Comment indiquer qu’une application nécessite le Framework 4.5 ?
Comment déterminer la version du framework installé ?
Chemin des assemblies du Framework .NET
Emplacement de MSBuild
2. Synthèse des fonctionnalités par version
Framework
Compilateur C#
3. Dates de fin de support
Framework .NET
Visual Studio
Windows
1. Synthèse des versions des composants du Framework .NET
Version framework .NET | Date de sortie | CLR | .NET Standard(1) | Visual Studio | Compilateur C# | MSBuild (ToolsVersion) |
Version des assemblies .NET | Compatibilité Windows |
---|---|---|---|---|---|---|---|---|
4.7.1 | octobre 2017 | 4.0 | 2.0(2) | VS 2017 (15.3) | 7.1 | 15.0 | Cette règle n’est plus applicable(8) | 7 SP1, 8.1, 10 Anniversary Update, 2008 R2 SP1, 2012, 2012 R2, 2016 |
4.7 | avril 2017 | VS 2017 (15.0)(3) | 7.0 | |||||
4.6.2 | août 2016 | VS 2015 (14.0)(3) | 6.0 | 14.0 | 4.0.30319.X (par ex. 4.0.30319.42000) 4.6.X.X |
7 SP1, 8, 8.1, 10, 2008 SP2, 2008 R2 SP1, 2012, 2012 R2 |
||
4.6.1 | novembre 2015 | |||||||
4.6 | juillet 2015 | 1.3 | 4.0.30319.X (par ex. 4.0.30319.18400) 4.5.X.X |
Vista SP2, 7 SP1, 8, 8.1, 10, 2008 SP2, 2008 R2 SP1, 2012, 2012 R2 |
||||
4.5.2 | mai 2014 | 1.2 | VS 2013 (12.0)(4) | 5.0 | 12.0(7) | Vista, 7, 8, 8.1, 2008 SP2, 2008 R2 SP1, 2012, 2012 R2 |
||
4.5.1 | novembre 2013 | |||||||
4.5 | août 2012 | 1.1 | VS 2012 (11.0)(4) | 4.0 | 4.0.30319.X(6) (par ex. 4.0.30319.17329) 4.5.X.X |
Vista, 7, 8, 2008 SP2, 2008 R2 SP1, 2012 |
||
4.0 | janvier 2010 | VS 2010 (10.0)(5) | 4.0 | 4.0.30319.X (par ex. 4.0.30319.1/4.0.30319.269) |
Vista, 7, 2003, 2008 SP2, 2008 R2 SP1 |
|||
3.5 | novembre 2007 | 2.0 | VS 2008 (9.0) | 3.0 | 3.5 | 3.5.X.X (par ex. 3.5.30729.5420) |
Vista, 7, 8, 8.1, 10, 2003, 2008 SP2, 2012, 2012 R2, 2008 R2 SP1 |
|
3.0 | novembre 2006 | Visual Studio 2005 (8.0) | 2.0 | 2.0 | 3.0.X.X (par ex 3.0.6920.5011) |
Vista, 2003, 2008 SP2, 2008 R2 SP1 |
||
2.0 | janvier 2006 | 2.0.X.X (par ex. 2.0.50727.8645) |
2003, 2008 SP2, 2008 RS SP1 | |||||
1.1 | avril 2003 | 1.1 | VS 2003 (7.1) | 1.2 | 2003 | |||
1.0 | janvier 2002 | 1.0 | VS .NET (7.0) | 1.0 |
(1): Version maximum du .NET Standard implémentée par le framework (par exemple: le framework 4.6.1 respecte au maximum le .NET Standard 2.0) (cf. .NET Standard Versions).
(2): La version minimum du framework implémentant le .NET Standard 1.4 est 4.6.1 donc tous les frameworks supérieurs à 4.6.1 respectent le .NET Standard 1.4 et supérieur (cf. .NET Standard Versions).
(3): Visual Studio 2015 et 2017 permettent de compiler des projets du framework 4.7.
(4): Visual Studio 2012 et 2013 permettent de compiler des projets du framework 4.6.2 maximum.
(5): Visual Studio 2010 permet de compiler des projets du Framework 4.0 maximum.
(6): Les frameworks 4.5 et suivants ont remplacés des assemblies du framework 4.0 contrairement aux versions précédant la 4.0 qui ajoutent des assemblies (voir plus bas).
(7): A partir de Visual Studio 2013, MSBuild n’est plus livré avec le framework mais directement avec Visual. Le passage de la version de MSBuild 4.0 à 12.0 est dû à l’alignement avec la version de Visual Studio 2013.
(8): Microsoft conseille de ne plus se baser sur les versions d’assemblies pour déterminer la version du framework (cf. How to: Determine Which .NET Framework Versions Are Installed). Cette règle n’est donc plus applicable.
Remplacement du Framework 4.0 par la version 4.5
Jusqu’à la version 4.0, toutes les versions du framework correspondait à des ajouts d’assemblies. Les assemblies du framework 2.0 sont rangées dans un répertoire particulier, et il en est de même pour le framework 3.0 et 3.5. Il suffisait donc de regarder la version des assemblies pour savoir de quel framework elles dépendaient.
Depuis la version 4.5, Microsoft a remplacé certaines assemblies du Framework 4.0 par des assemblies du framework 4.5 (de même pour les frameworks suivants). Ces nouvelles assemblies sont rangées dans le même répertoire que ceux du 4.0 et surtout leur version ne change que pour le numéro de révision:
Par exemple, l’assembly "clr.dll" dans C:\Windows\Microsoft.NET\Framework\v4.0.30319
aura pour numéro de version:
Version framework .NET | Version clr.dll |
---|---|
4.0 | 4.0.30319.0 à 4.0.30319.17000 |
4.5 | 4.0.30319.17001 à 4.0.3019.18400 |
4.5.1 | 4.0.30319.18401 à 4.0.30319.33999 |
4.5.2 | 4.0.30319.34000 à 4.0.30319.41999 |
4.6 | A partir de 4.0.30319.42000 |
Il est conseillé de ne plus se baser sur les versions d’assemblies pour déterminer la version du framework. Il faut utiliser la méthode avec la base de registres (cf. How to: Determine Which .NET Framework Versions Are Installed).
Sachant que les assemblies du Framework 4.0 sont remplacées par celles du Framework 4.5 et suivants, il peut se produire une incompatibilité. 2 cas de figure peuvent se produire:
1er cas: compatibilité ascendante
Par exemple, si une application est compilée en ciblant le Framework 4.0 et qu’elle est testée sur une machine comprenant seulement le Framework 4.0. Les assemblies .NET utilisées seront celles du Framework 4.0.
En revanche, si on exécute cette application sur une autre machine où le Framework 4.5 est installée, les assemblies .NET utilisées seront celles du Framework 4.5 (certaines assemblies du Framework 4.0 ayant été remplacées par l’installation du Framework 4.5). Il peut se produire un problème de compatiblité car l’application n’a pas été testée pour les assemblies appartenant au Framework 4.5.
Ce cas de figure est plus rare puisque les assemblies sont théoriquement plus stables lorsque la version augemente.
2e cas: compatibilité descendante
Si on compile une application en ciblant le Framework 4.0 sur une machine où le Framework 4.5 est installée, cette application sera testée en utilisant les assemblies du Framework 4.5.
Si on exécute cette même application sur une autre machine où seul le Framework 4.0 est installé, il peut se produire un problème de compatibilité car l’application n’a pas été testée pour les assemblies appartenant au Framework 4.0.
La solution à ce problème est de forcer à exécuter l’application si le Framework 4.5 en l’indiquant dans le fichier de configuration.
Une solution plus générale serait de tester une application exactement dans la même version de framework que les machines sur lesquelles elle sera déployée.
"Breaking-changes" connus:
Application Compatibility in the .NET Framework 4.5.
Comment indiquer qu’une application nécessite le Framework 4.5 ?
Pour une application WinForms, WPF ou Console, il faut indiquer dans le app.Config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
Pour une application ASP.NET:
<configuration>
<system.web>
<compilation debug="true" strict="false" explicit="true" targetFramework="4.5" />
</system.web>
</configuration>
Un message sera affiché à l’exécution de l’application si la version nécessaire du framework n’est pas installée.
Comment déterminer la version du framework installé ?
Suite au remplacement du 4.0 par les versions suivantes, on ne peut plus regarder les répertoires d’installation du framework pour savoir si le framework est installée. De nombreuses assemblies se trouveront toujours dans le répertoire C:\Windows\Microsoft.NET\Framework\v4.0.30319
alors qu’elles appartiennent à des frameworks suivants le 4.0.
La méthode consiste à regarder en base de registres en tapant "regedit.exe":
- Pour les frameworks de 1 à 4: sous la clé
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP
se trouve des noeuds avec des numéros correspondant aux versions des frameworks installés. - Pour les frameworks supérieurs ou égaux à 4.5: à la clé
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full
, se trouvent la valeur "Release". La valeur du DWORD "Release" permet de déterminer le framework:
Version du Framework .NET Valeur du DWORD Release 4.7.1 Sur Windows 10: 461308
Sur tous les autres OS: 4613104.7 Sur Windows 10: 460798
Sur tous les autres OS: 4608054.6.2 Sur Windows 10: 394802
Sur tous les autres OS: 3948064.6.1 Sur Windows 10: 394254
Sur tous les autres OS: 3942714.6 Sur Windows 10: 393295
Sur tous les autres OS: 3932974.5.2 379893 4.5.1
installé sur Windows 8, Windows 7 SP1 ou Windows Vista SP2378758 4.5.1
installé sur Windows 8.1 ou Windows Server 2012 R2378675 4.5 378389
Plus d’informations sur: How to: Determine Which .NET Framework Versions Are Installed.
Chemin des assemblies du Framework .NET
Les assemblies du framework se trouvent dans:
C:\Windows\Microsoft.NET\Framework\vX.X
avec "X.X" étant le numéro du framework de 1.0 à 3.5 et 4.0.30319 pour les versions supérieurs à 4.0. Ces assemblies ne doivent pas être référencées dans un projet Visual.
Les assemblies à référencer dans un projet Visual se trouvent dans:
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework
Emplacement de MSBuild
Avant Visual Studio 2013, MSBuild était livré avec le Framework .NET et se trouvait dans le répertoire du framework:
- .NET v2.0:
C:\Windows\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe
- .NET v3.5:
C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe
- .NET v4.0:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
A partir de Visual Studio 2013, MSBuild est livré avec Visual et se trouve dans le répertoire "Program Files":
- Sur une machine 32-bit:
C:\Program Files\MSBuild\12.0\bin
- Sur une machine 64-bit:
C:\Program Files (x86)\MSBuild\12.0\bin
2. Synthèse des fonctionnalités par version
Framework
2.0:
- WinForms,
- ASP.NET,
- ADO.NET.
3.0:
- WPF,
- WCF,
- WF,
- Card Space.
3.5:
- LinQ,
- Entity Framework.
4.0:
- Parallel LinQ,
- Task Parallel Library.
4.5
- Modern UI Runtime,
- Modèle asynchrone basé sur des tâches.
4.5.1
- Compactage de la pile des objets de grande taille ("large object heap") à la demande,
- Amélioration de la compilation à la volée ("JIT") sur des machines multicore.
Compilateur C#
Se reporter à la Synthèse des fonctionnalités du langage C# par version.
3. Dates de fin de support
Framework .NET
Version Framework .NET | Support standard | Support étendu |
---|---|---|
.NET 3.5 et 3.5 SP1 | 12/07/2011 | 12/07/2011 |
.NET 4.0, 4.5 et 4.5.1 | 12/01/2016 | 12/01/2016 |
.NET 4.5.2(1) | 09/01/2018 | 10/01/2023 |
.NET 4.6(2) | 13/10/2020 | 14/10/2025 |
.NET 4.6.1(2) | ||
.NET 4.6.2(2) | ||
.NET 4.7(3) | 11/01/2022 | 11/01/2027 |
.NET 4.7.1(3) |
(1): même cycle de vie que Windows 8.1.
(2): même cycle de vie que Windows 2012.
(3): même cycle de vie que Windows Server 2016.
Visual Studio
Version Visual Studio | Support standard | Support étendu |
---|---|---|
VS 2005 | 12/04/2011 | 12/04/2016 |
VS 2008 | 09/04/2013 | 10/04/2018 |
VS 2010 | 14/07/2015 | 10/07/2020 |
VS 2012 | 09/01/2018 | 10/01/2023 |
VS 2013 | 09/04/2019 | 09/04/2024 |
VS 2015 | 13/10/2020 | 14/10/2025 |
VS 2017 | 12/04/2022 | 13/04/2027 |
Windows
Version Windows | Support standard | Support étendu |
---|---|---|
Windows Server 2003 | 14/07/2015 | |
Windows Server 2003 SP2 | 13/01/2015 | 14/01/2020 |
Windows Vista SP2 | 10/04/2012 | 11/04/2017 |
Windows Server 2008 R2 | 13/01/2015 | 14/01/2020 |
Windows 7 SP1 | 13/01/2015 | 14/01/2020 |
Windows 8.1 | 9/01/2018 | 10/01/2023 |
Windows Server 2012 | 09/10/2018 | 10/10/2023 |
Windows 10 | 13/10/2020 | 14/10/2025 |
Windows Server 2016 | 11/01/2022 | 11/01/2027 |
Pour plus d’informations:
Politique de support Microsoft
- Versions et dépendances du .NET Framework: https://msdn.microsoft.com/fr-fr/library/bb822049%28v=vs.110%29.aspx
- .NET 4.5 is an in-place replacement for .NET 4.0: https://weblog.west-wind.com/posts/2012/Mar/13/NET-45-is-an-inplace-replacement-for-NET-40
- Assembly Versioning: https://msdn.microsoft.com/en-us/library/51ket42z%28v=vs.110%29.aspx
- Compatibility of .NET Framework 4.5: http://blogs.msdn.com/b/dotnet/archive/2011/09/26/compatibility-of-net-framework-4-5.aspx
- .NET Versioning and Multi-Targeting – .NET 4.5 is an in-place upgrade to .NET 4.0 de Scott Handelman: http://www.hanselman.com/blog/NETVersioningAndMultiTargetingNET45IsAnInplaceUpgradeToNET40.aspx
- Comment : déterminer les versions .NET Framework installées: https://msdn.microsoft.com/fr-fr/library/hh925568%28v=vs.110%29.aspx
- http://stackoverflow.com/questions/12070518/where-is-the-net-framework-4-5-directory
- MSBuild is now part of Visual Studio!: http://blogs.msdn.com/b/visualstudio/archive/2013/07/24/msbuild-is-now-part-of-visual-studio.aspx
- https://fr.wikipedia.org/wiki/MSBuild
- MSBuild Toolset (ToolsVersion): https://msdn.microsoft.com/fr-fr/library/bb383796.aspx
- http://stackoverflow.com/questions/247621/what-are-the-correct-version-numbers-for-c
- Stackoverflow: .Net Framework references path vs Loaded Assembly Path: https://stackoverflow.com/questions/41601681/net-framework-references-path-vs-loaded-assembly-path