Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
È possibile fare riferimento a tutte le infrastrutture di compilazione necessarie per uno stack di tecnologie di sviluppo, ad esempio .NET SDK, semplicemente facendo riferimento a un set di proprietà e destinazioni note collettivamente come SDK di progetto in base al relativo ID specifico. L'ID fa riferimento a un particolare set di file che contengono definizioni di .props
proprietà e .targets
file che contengono definizioni di destinazione. Per fare riferimento a un SDK di progetto, usare l'attributo Sdk
nel nodo di progetto di primo livello.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net46</TargetFramework>
</PropertyGroup>
</Project>
Durante la valutazione del progetto, MSBuild aggiunge importazioni implicite nella parte superiore e inferiore del file di progetto:
<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>
Sono disponibili molti SDK distribuiti da Microsoft. L'SDK del progetto a cui si fa riferimento nell'esempio precedente ha il moniker Microsoft.NET.Sdk
. Gli SDK di progetto associati a .NET Core e .NET 5 e versioni successive sono elencati in Panoramica di .NET Project SDK.
Fare riferimento a un SDK di progetto
Esistono tre modi per fare riferimento a un SDK di progetto:
Usare l'attributo Sdk
nell'elemento Project
<Project Sdk="My.Custom.Sdk">
...
</Project>
Un'importazione implicita viene aggiunta alla parte superiore e inferiore del progetto, come illustrato in precedenza.
Per specificare una versione specifica dell'SDK, aggiungerla all'attributo Sdk
:
<Project Sdk="My.Custom.Sdk/1.2.3">
...
</Project>
Usare l'elemento di primo livello Sdk
<Project>
<Sdk Name="My.Custom.Sdk" Version="1.2.3" />
...
</Project>
Un'importazione implicita viene aggiunta alla parte superiore e inferiore del progetto, come illustrato in precedenza.
L'attributo Version
non è obbligatorio.
Usare l'elemento Import
in qualsiasi punto del progetto
<Project>
<PropertyGroup>
<MyProperty>Value</MyProperty>
</PropertyGroup>
<Import Project="Sdk.props" Sdk="My.Custom.Sdk" />
...
<Import Project="Sdk.targets" Sdk="My.Custom.Sdk" />
</Project>
Quando si includono in modo esplicito le importazioni nel progetto, si ha il controllo completo sull'ordine.
Quando si usa l'elemento Import
, è possibile specificare anche un attributo facoltativo Version
. Ad esempio, è possibile specificare <Import Project="Sdk.props" Sdk="My.Custom.Sdk" Version="1.2.3" />
.
Avvertimento
Se si modifica il progetto per utilizzare gli elementi Import
, assicurarsi di aggiungere sia gli import .props
che .targets
, e rimuovere l'SDK dall'elemento Project
e dagli elementi Sdk
. In caso contrario, le importazioni verranno duplicate e verrà visualizzato un MSB4011
avviso.
Come vengono risolti gli SDK del progetto
Quando si valuta l'importazione, MSBuild risolve in modo dinamico il percorso dell'SDK del progetto in base al nome e alla versione specificati. MSBuild include anche un elenco di resolver SDK registrati, che sono plug-in che individuano gli SDK di progetto nel computer. Questi plug-in includono:
Resolver basato su NuGet che interroga i feed dei pacchetti configurati per trovare i pacchetti NuGet che corrispondono all'ID e alla versione dell'SDK specificato.
Questo sistema di risoluzione è attivo solo se è stata specificata una versione facoltativa. Può essere usato per qualsiasi SDK di progetto personalizzato.
Un resolver .NET SDK che risolve gli SDK di MSBuild installati con .NET SDK.
Questo risolutore individua gli SDK del progetto, come
Microsoft.NET.Sdk
eMicrosoft.NET.Sdk.Web
, che fanno parte del prodotto.Sistema di risoluzione predefinito che risolve gli SDK installati con MSBuild.
Il resolver SDK basato su NuGet supporta la specifica di una versione nel file global.json , che consente di controllare la versione dell'SDK del progetto in un'unica posizione anziché in ogni singolo progetto:
{
"msbuild-sdks": {
"My.Custom.Sdk": "5.0.0",
"My.Other.Sdk": "1.0.0-beta"
}
}
Durante una compilazione è possibile usare una sola versione di ogni SDK di progetto. Se si fa riferimento a due versioni diverse dello stesso SDK del progetto, MSBuild genera un avviso. È consigliabile non specificare una versione nei progetti se nel file diglobal.json è specificata una versione.