Utiliser les kits SDK de projet MSBuild
Vous pouvez référencer toute l’infrastructure de build requise pour une pile de technologies de développement, comme le KIT DE développement logiciel (SDK) .NET, en référençant simplement un ensemble de propriétés et de cibles collectivement appelées projet SDK par son ID spécifique. L’ID fait référence à un ensemble particulier de fichiers .props
qui contiennent des définitions de propriétés et des fichiers .targets
qui contiennent des définitions cibles. Vous référencez un Kit de développement logiciel (SDK) de projet à l’aide de l’attribut Sdk
sur le nœud de projet de niveau supérieur.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net46</TargetFramework>
</PropertyGroup>
</Project>
Durant l’évaluation du projet, MSBuild ajoute des importations implicites au début et à la fin du fichier projet :
<Project>
<!-- Implicit top import -->
<Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
<PropertyGroup>
<TargetFramework>net46</TargetFramework>
</PropertyGroup>
<!-- Implicit bottom import -->
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
</Project>
Il existe de nombreux SDK distribués par Microsoft. Le SDK de projet référencé dans l’exemple précédent a le moniker Microsoft.NET.Sdk
. Les SDK de projet associés à .NET Core et .NET 5 et versions ultérieures sont répertoriés dans la section Vue d’ensemble des SDK de projet .NET.
Référencer un kit SDK de projet
Il existe trois manières de référencer un kit SDK de projet :
Utiliser l’attribut Sdk
sur l’élément <Project/>
<Project Sdk="My.Custom.Sdk">
...
</Project>
Une importation implicite est ajoutée au début et à la fin du projet, comme expliqué précédemment.
Pour spécifier une version spécifique du SDK, ajoutez-la à l’attribut Sdk
:
<Project Sdk="My.Custom.Sdk/1.2.3">
...
</Project>
Utiliser l’élément <Sdk/>
de niveau supérieur
<Project>
<Sdk Name="My.Custom.Sdk" Version="1.2.3" />
...
</Project>
Une importation implicite est ajoutée au début et à la fin du projet, comme expliqué précédemment.
L’attribut Version
n’est pas nécessaire.
Utiliser l’élément <Import/>
n’importe où dans votre projet
<Project>
<PropertyGroup>
<MyProperty>Value</MyProperty>
</PropertyGroup>
<Import Project="Sdk.props" Sdk="My.Custom.Sdk" />
...
<Import Project="Sdk.targets" Sdk="My.Custom.Sdk" />
</Project>
Lorsque vous incluez explicitement les imports dans votre projet, vous avez un contrôle total sur l’ordre.
Quand vous utilisez l’élément <Import/>
, vous pouvez également spécifier un attribut Version
facultatif. Par exemple, vous pouvez spécifier <Import Project="Sdk.props" Sdk="My.Custom.Sdk" Version="1.2.3" />
.
Avertissement
Si vous modifiez votre projet pour utiliser des éléments <Import/>
, assurez-vous d’ajouter à la fois les imports .props
et .targets
, et de supprimer le SDK de l’élément <Project/>
et des éléments <Sdk/>
. Si vous ne le faites pas, vous obtenez des importations en double et un avertissement MSB4011
.
Méthode de résolution des kits SDK de projet
Durant l’évaluation de l’importation, MSBuild résout dynamiquement le chemin du SDK de projet en fonction du nom et de la version que vous avez spécifiés. MSBuild a également la liste des programmes de résolution de SDK inscrits, qui sont des plug-ins qui localisent les SDK de projet sur votre machine. Ces plug-ins sont les suivants :
Un programme de résolution basé sur NuGet qui interroge vos flux de packages configurés pour localiser les packages NuGet qui correspondent à l’ID et à la version du kit SDK que vous avez spécifié.
Ce programme de résolution est actif uniquement si vous avez spécifié une version facultative. Il peut être utilisé pour n’importe quel SDK de projet personnalisé.
Un programme de résolution de SDK .NET qui résout les SDK MSBuild installés avec le SDK .NET.
Ce programme de résolution localise les SDK de projet comme
Microsoft.NET.Sdk
etMicrosoft.NET.Sdk.Web
qui font partie du produit.Un programme de résolution par défaut qui résout les kits SDK installés avec MSBuild.
Le programme de résolution de SDK basé sur NuGet prend en charge la spécification d’une version dans le fichier global.json, ce qui vous permet de contrôler la version du SDK de projet à un seul endroit plutôt que dans chaque projet individuel :
{
"msbuild-sdks": {
"My.Custom.Sdk": "5.0.0",
"My.Other.Sdk": "1.0.0-beta"
}
}
Seule une version de chaque kit SDK de projet peut être utilisée durant une build. Si vous référencez deux versions différentes du même SDK de projet, MSBuild émet un avertissement. Nous vous recommandons de ne pas spécifier de version dans vos projets si une version est spécifiée dans le fichier global.json.