Ciblage de versions spécifiques du .NET Framework avec MSBuild

Mise à jour : novembre 2007

Visual Studio 2008 et MSBuild 3.5 vous permettent de cibler plusieurs versions de .NET Framework (versions 2.0, 3.0 et 3.5) lorsque vous créez ou générez des projets. Cette fonctionnalité est appelée multi-ciblage. Dans MSBuild, le multi-ciblage est accompli en utilisant un nouvel attribut, nommé ToolsVersion, dans Project, élément (MSBuild).

Ensembles d'outils, versions cibles du .Net Framework et ToolsVersion

Pour comprendre comment MSBuild fonctionne avec Visual Studio 2008, vous devez connaître la différence entre un ensemble d'outils et un Framework cible, et savoir comment les deux sont en rapport avec le nouvel attribut ToolsVersion. Ils sont tous utilisés pour déterminer comment MSBuild 3.5 génère vos projets.

Ensemble d'outils

Un ensemble d'outils est un jeu de tâches MSBuild correspondantes, de cibles MSBuild et d'outils installés avec MSBuild et .NET Framework. Un ensemble d'outils inclut des compilateurs tels que csc.exe et vbc.exe, des fichiers cibles communs (microsoft.common.targets) et le fichier des tâches courantes (microsoft.common.tasks). L'ensemble d'outils 3.5 peut être utilisé avec la cible .NET Framework versions 2.0 et 3.0. Par contre, l'ensemble d'outils 2.0 ne peut être utilisé qu'avec la cible .NET Framework version 2.0.

Visual Studio 2008 installe .NET Framework 3.5, qui comprend deux ensembles d'outils prédéfinis : l'un pour .NET Framework 2.0 et l'autre pour .NET Framework 3.5. Aucun ensemble d'outils n'est défini pour .NET Framework 3.0 qui est fourni avec Windows Vista. L'ensemble d'outils .NET Framework 2.0 peut uniquement cibler .NET Framework 2.0, tandis que l'ensemble d'outils NET Framework 3.5 cible lui .NET Framework versions 2.0, 3.0 et 3.5.

Vous pouvez également créer vos propres modèles de projet personnalisés. Pour plus d'informations, consultez Configurations standard et personnalisée de l'ensemble d'outils.

Framework cible

Le Framework cible est la version particulière de .NET Framework sur laquelle repose l'exécution de votre projet. Elle est nécessaire parce qu'elle active des fonctions de compilateur qui sont exclusives à cette version de .NET Framework 2.0 ou fait référence à des assemblys fournis uniquement dans cette version du Framework.

Il existe actuellement trois versions .NET Framework pouvant être utilisées dans Visual Studio 2008 :

  • .NET Framework 2.0 (inclus avec Visual Studio).

  • .NET Framework 3.0 (inclus avec Windows Vista).

  • .NET Framework 3.5 (inclus avec Visual Studio 2008).

Bien qu'il y ait trois versions différentes de .NET Framework, toutes les versions sont basées sur le même CLR (Common Language Runtime) version 2.0 fourni avec Visual Studio 2005.

La version de Framework cible est spécifiée dans votre fichier projet à travers la propriété TargetFrameworkVersion. Visual Studio définit cette valeur lorsque vous changez la version du Framework cible à travers l'environnement IDE (Integrated Development Environment). (Pour plus d'informations, consultez Comment : cibler un .NET Framework spécifique). Les valeurs possibles de la propriété TargetFrameworkVersion sont v2.0, v3.0 et v3.5. La valeur est spécifiée sous forme de propriété MSBuild, telle que :

<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

Attribut ToolsVersion

La version de l'ensemble d'outils peut être spécifiée par l'attribut ToolsVersion de Project, élément (MSBuild) dans le fichier projet. L'exemple suivant indique que le projet doit être généré à l'aide de l'ensemble d'outils .NET Framework 2.0 2.0 :

<Project ToolsVersion="2.0" ... </Project>

Lorsque vous générez une solution ou un projet à partir de l'invite de commande en spécifiant un attribut ToolsVersion pour msbuild.exe, tous les projets et leurs dépendances projet-à-projet sont générés d'après cet attribut, même si chaque projet dans la solution spécifie son propre attribut ToolsVersion dans son Project, élément (MSBuild).

Différences entre les versions du .NET Framework

Les trois versions de .NET Framework reposent toutes sur la version 2.0 du CLR. Les versions de .NET Framework diffèrent les unes des autres au niveau de la liste d'assemblys qu'elles mettent à votre disposition pour vos projets. Par exemple, LINQ est une nouvelle technologie incluse dans Visual Studio 2008. .NET Framework 3.5 est la seule version de .NET Framework à comporter des assemblys liés à LINQ. Par conséquent, vous ne pouvez utiliser LINQ que si votre projet cible spécifiquement .NET Framework 3.5. De même, Windows Presentation Foundation (WPF) est inclus dans Windows Vista. Vous ne pouvez pas générer d'applications WPF à moins que votre projet vise .NET Framework 3.0 et les versions ultérieures de .NET Framework.

Pour plus d'informations, consultez Configurations standard et personnalisée de l'ensemble d'outils.

Localisation des ensembles d'outils dans les projets

Pour créer un projet, Visual Studio 2008 requiert un ensemble d'outils. MSBuild localise les cibles et les tâches à l'aide de la propriété $(MSBuildToolsPath). Par exemple, MSBuild recherche le fichier Microsoft.CSharp.targets en utilisant l'élément XML suivant :

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 

Microsoft.CSharp.targets est un exemple de processus de génération spécifique à la langue utilisée par Visual Studio 2008 pour générer des projets Visual C#. $(MSBuildToolsPath) localise le chemin d'accès de la version appropriée de .NET Framework où Microsoft.CSharp.targets est installé (par exemple, C:\Windows\Microsoft.Net\Framework\v2.0.50727).

Avant que l'ensemble d'outils MSBuild 3.5 puisse générer ce projet, il doit localiser $(MSBuildToolsPath) à l'emplacement d'installation de MSBuild 3.5 afin que l'ensemble d'outils importe la version Visual Studio 2008 de Microsoft.CSharp.targets.

Selon le paramétrage de ToolsVersion, $(MSBuildToolsPath) obtient une valeur différente et importe donc un ensemble d'outils différent en fonction de ce paramétrage. Ce système souple d'emploi permet au projet, à l'hôte MSBuild ou à l'utilisateur de spécifier l'ensemble d'outils à utiliser pour générer un projet, ainsi qu'un moyen pour MSBuild d'utiliser les informations d'emplacement pour choisir l'ensemble d'outils correct.

Fonctionnement de l'attribut ToolsVersion

Lorsque vous créez un projet, ou que vous mettez à niveau un projet existant dans Visual Studio 2008, un attribut nommé ToolsVersion est inclus automatiquement dans le fichier projet et défini à une valeur par défaut de « 3.5 ». Pour plus d'informations, consultez Ciblage d'un .NET Framework spécifique.

Lorsqu'une valeur ToolsVersion est définie dans un fichier projet, MSBuild l'utilise pour déterminer les valeurs de $(MSBuildToolsPath) (ou $(MSBuildBinPath)), qui est le chemin d'accès aux outils MSBuild. Si une valeur ToolsVersion n'est pas définie, MSBuild continue à utiliser le chemin d'accès de l'ancien ensemble d'outils parce qu'il suppose que le projet est un projet Visual Studio 2005.

Si vous ouvrez un projet Visual Studio 2005 existant dans Visual Studio 2008, le projet est « mis à niveau » physiquement pour inclure « ToolsVersion=3 .5 » puisque Visual Studio 2008 ne prend en charge la génération qu'avec l'ensemble d'outils 3.5. En conséquence, lorsque vous générez le projet dans Visual Studio 2008, il utilise l'ensemble d'outils Visual Studio 2008 (3.5) au lieu de l'ensemble d'outils Visual Studio (2.0).

Les projets créés en utilisant l'ensemble d'outils 2.0 peuvent cibler .NET Framework 2.0 et les projets créés en utilisant l'ensemble d'outils 3.5 peuvent cibler les versions 2.0, 3.0 ou 3.5 de .NET Framework. Même si un projet Visual Studio a été migré vers Visual Studio 2008 est mis à niveau pour utiliser l'ensemble d'outils 3.5, le Framework cible du projet reste .NET Framework 2.0. Cette conception garantit que lorsque vous effectuez une migration de votre projet vers Visual Studio 2008, il n'introduira pas de nouvelles dépendances. Le projet continuera à être généré exactement de la même façon que dans Visual Studio.

Remarque :

Si l'attribut ToolsVersion est déjà défini dans un projet, Visual Studio 2008 ne modifie pas sa valeur. La valeur ToolsVersion peut être remplacée. Pour plus d'informations, consultez Substitution des paramètres ToolsVersion.

Compatibilité de Visual Studio 2005 et MSBuild 3.5

Visual Studio 2005 ne peut pas ouvrir ni générer les projets Visual Studio 2008, pas plus que les projets mis à niveau vers Visual Studio 2008. En revanche, l'ensemble d'outils 2.0 de MSBuild pourra peut-être générer vos projets Visual Studio 2008 si vous n'avez pas utilisé de nouvelles fonctionnalités spécifiques à l'ensemble d'outils Visual Studio 2008, telles que LINQ, les nouveaux Visual C# 2008 ou les fonctionnalités de la syntaxe Visual Basic 2008, etc.

Voir aussi

Concepts

Substitution des paramètres ToolsVersion

Configurations standard et personnalisée de l'ensemble d'outils