Aggiunte al formato csproj per .NET CoreAdditions to the csproj format for .NET Core

Questo documento descrive le modifiche aggiunte ai file di progetto nell'ambito del passaggio da project.json a csproj e a MSBuild.This document outlines the changes that were added to the project files as part of the move from project.json to csproj and MSBuild. Per altre informazioni sulla sintassi generale dei file di progetto e informazioni di riferimento, vedere la documentazione del file di progetto MSBuild.For more information about general project file syntax and reference, see the MSBuild project file documentation.

Riferimenti impliciti al pacchettoImplicit package references

È possibile fare riferimento ai metapacchetti in modo implicito in base ai framework di destinazione specificati nella proprietà <TargetFramework> o <TargetFrameworks> del file di progetto.Metapackages are implicitly referenced based on the target framework(s) specified in the <TargetFramework> or <TargetFrameworks> property of your project file. <TargetFrameworks> viene ignorato se è specificato <TargetFramework>, indipendentemente dall'ordine.<TargetFrameworks> is ignored if <TargetFramework> is specified, independent of order. Per altre informazioni, vedere pacchetti, metapacchetti e Framework.For more information, see Packages, metapackages, and frameworks.

 <PropertyGroup>
   <TargetFramework>netcoreapp2.1</TargetFramework>
 </PropertyGroup>
<PropertyGroup>
  <TargetFrameworks>netcoreapp2.1;net462</TargetFrameworks>
</PropertyGroup>

SuggerimentiRecommendations

Poiché si fa riferimento ai metapacchetti Microsoft.NETCore.App o NETStandard.Library in modo implicito, ecco le procedure consigliate:Since Microsoft.NETCore.App or NETStandard.Library metapackages are implicitly referenced, the following are our recommended best practices:

  • Quando la destinazione è .NET Core o .NET Standard, non fare mai riferimento in modo esplicito ai metapacchetti Microsoft.NETCore.App o NETStandard.Library tramite l'elemento <PackageReference> nel file di progetto.When targeting .NET Core or .NET Standard, never have an explicit reference to the Microsoft.NETCore.App or NETStandard.Library metapackages via a <PackageReference> item in your project file.
  • Se occorre una versione specifica del runtime quando la destinazione è .NET Core, è necessario usare la proprietà <RuntimeFrameworkVersion> del progetto, ad esempio, 1.0.4, anziché fare riferimento al metapacchetto.If you need a specific version of the runtime when targeting .NET Core, you should use the <RuntimeFrameworkVersion> property in your project (for example, 1.0.4) instead of referencing the metapackage.
    • Ciò può avvenire se si usano distribuzioni autosufficienti e occorre una versione specifica, ad esempio, della patch del runtime 1.0.0 LTS.This might happen if you are using self-contained deployments and you need a specific patch version of 1.0.0 LTS runtime, for example.
  • Se occorre una versione specifica del metapacchetto NETStandard.Library quando la destinazione è .NET Standard, è possibile usare la proprietà <NetStandardImplicitPackageVersion> e impostare la versione necessaria.If you need a specific version of the NETStandard.Library metapackage when targeting .NET Standard, you can use the <NetStandardImplicitPackageVersion> property and set the version you need.
  • Non aggiungere o aggiornare in modo esplicito i riferimenti al metapacchetto Microsoft.NETCore.App o NETStandard.Library nei progetti .NET Framework.Don't explicitly add or update references to either the Microsoft.NETCore.App or NETStandard.Library metapackage in .NET Framework projects. Se è necessaria qualsiasi versione di NETStandard.Library durante l'uso di un pacchetto NuGet basato su .NET Standard, NuGet installa automaticamente tale versione.If any version of NETStandard.Library is needed when using a .NET Standard-based NuGet package, NuGet automatically installs that version.

Versione implicita per alcuni riferimenti al pacchettoImplicit version for some package references

La maggior parte degli utilizzi di <PackageReference> richiede l'impostazione dell'attributo Version per specificare la versione del pacchetto NuGet da usare.Most usages of <PackageReference> require setting the Version attribute to specify the NuGet package version to be used. Se però si usa .NET Core 2.1 o 2.2 e si fa riferimento a Microsoft.AspNetCore.App o Microsoft.AspNetCore.All, l'attributo non è necessario.When using .NET Core 2.1 or 2.2 and referencing Microsoft.AspNetCore.App or Microsoft.AspNetCore.All, however, the attribute is unnecessary. .NET Core SDK può selezionare automaticamente la versione dei pacchetti che deve essere usata.The .NET Core SDK can automatically select the version of these packages that should be used.

IndicazioneRecommendation

Quando si fa riferimento ai pacchetti Microsoft.AspNetCore.App o Microsoft.AspNetCore.All, non specificarne la versione.When referencing the Microsoft.AspNetCore.App or Microsoft.AspNetCore.All packages, do not specify their version. Se si specifica una versione, l'SDK potrebbe visualizzare l'avviso NETSDK1071.If a version is specified, the SDK may produce warning NETSDK1071. Per non visualizzare più questo avviso, rimuovere la versione del pacchetto come nell'esempio seguente:To fix this warning, remove the package version like in the following example:

<ItemGroup>
  <PackageReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>

Problema noto: .NET Core 2.1 SDK supportava questa sintassi solo quando il progetto usa anche Microsoft.NET.Sdk.Web.Known issue: the .NET Core 2.1 SDK only supported this syntax when the project also uses Microsoft.NET.Sdk.Web. Questo problema è stato risolto in .NET Core SDK 2.2.This is resolved in the .NET Core 2.2 SDK.

Questi riferimenti ai metapacchetti ASP.NET Core hanno un comportamento leggermente diverso dalla maggior parte dei normali pacchetti NuGet.These references to ASP.NET Core metapackages have a slightly different behavior from most normal NuGet packages. Le distribuzioni dipendenti dal framework delle applicazioni che usano questi metapacchetti sfruttano automaticamente il framework condiviso di ASP.NET Core.Framework-dependent deployments of applications that use these metapackages automatically take advantage of the ASP.NET Core shared framework. Quando si usano i metapacchetti, con l'applicazione non vengono distribuiti asset dai pacchetti NuGet di riferimento di ASP.NET Core. Questi asset sono infatti inclusi nel framework condiviso di ASP.NET Core.When you use the metapackages, no assets from the referenced ASP.NET Core NuGet packages are deployed with the application—the ASP.NET Core shared framework contains these assets. Gli asset contenuti nel framework condiviso sono ottimizzati per la piattaforma di destinazione per migliorare i tempi di avvio dell'applicazione.The assets in the shared framework are optimized for the target platform to improve application startup time. Per altre informazioni sul framework condiviso, vedere Creazione di pacchetti di distribuzione di .NET Core.For more information about shared framework, see .NET Core distribution packaging.

Se è specificata una versione, questa viene considerata come la versione minima del framework condiviso ASP.NET Core per le distribuzioni dipendenti dal framework e come una versione esatta per le distribuzioni autonome.If a version is specified, it's treated as the minimum version of ASP.NET Core shared framework for framework-dependent deployments and as an exact version for self-contained deployments. Questo comportamento può avere le conseguenze seguenti:This can have the following consequences:

  • Se la versione di ASP.NET Core installata nel server è inferiore alla versione specificata in PackageReference, l'avvio del processo .NET Core non riesce.If the version of ASP.NET Core installed on the server is less than the version specified on the PackageReference, the .NET Core process fails to launch. Gli aggiornamenti per il metapacchetto sono spesso disponibili su NuGet.org prima che vengano resi disponibili in ambienti di hosting come Azure.Updates to the metapackage are often available on NuGet.org before updates have been made available in hosting environments such as Azure. L'aggiornamento ad ASP.NET Core della versione in PackageReference potrebbe causare un errore in un'applicazione distribuita.Updating the version on the PackageReference to ASP.NET Core could cause a deployed application to fail.
  • Se l'applicazione è stata distribuita come distribuzione autonoma, potrebbe non contenere gli ultimi aggiornamenti della sicurezza a .NET Core.If the application is deployed as a self-contained deployment, the application may not contain the latest security updates to .NET Core. Quando non è specificata una versione, l'SDK può includere automaticamente la versione più recente di ASP.NET Core nella distribuzione autonoma.When a version isn't specified, the SDK can automatically include the newest version of ASP.NET Core in the self-contained deployment.

Dichiarazioni Include di compilazione predefinite nei progetti .NET CoreDefault compilation includes in .NET Core projects

Con il passaggio al formato csproj nelle ultime versioni dell'SDK, per gli elementi di compilazione e le risorse incorporate le dichiarazioni Include ed Exclude predefinite sono state spostate nei file delle proprietà dell'SDK.With the move to the csproj format in the latest SDK versions, we've moved the default includes and excludes for compile items and embedded resources to the SDK properties files. Ciò significa che non è più necessario specificare queste dichiarazioni nel file di progetto.This means that you no longer need to specify these items in your project file.

Il motivo principale di questo cambiamento è la riduzione del disordine nel file di progetto.The main reason for doing this is to reduce the clutter in your project file. Le dichiarazioni predefinite presenti nell'SDK coprono i casi di utilizzo più comuni, pertanto non c'è alcuna necessità di ripeterle per ogni progetto creato.The defaults that are present in the SDK should cover most common use cases, so there is no need to repeat them in every project that you create. Di conseguenza, i file di progetto sono più piccoli e molto più semplici da comprendere e, se necessario, da modificare manualmente.This leads to smaller project files that are much easier to understand as well as edit by hand, if needed.

La tabella seguente mostra gli elementi e i GLOB Include ed Exclude nell'SDK:The following table shows which element and which globs are both included and excluded in the SDK:

ElementoElement GLOB IncludeInclude glob GLOB ExcludeExclude glob GLOB RemoveRemove glob
CompileCompile **/*.cs (o altre estensioni del linguaggio)**/*.cs (or other language extensions) **/*.user; **/*.*proj; **/*.sln; **/*.vssscc**/*.user; **/*.*proj; **/*.sln; **/*.vssscc N/DN/A
EmbeddedResourceEmbeddedResource **/*.resx**/*.resx **/*.user; **/*.*proj; **/*.sln; **/*.vssscc**/*.user; **/*.*proj; **/*.sln; **/*.vssscc N/DN/A
NoneNone **/* **/*.user; **/*.*proj; **/*.sln; **/*.vssscc**/*.user; **/*.*proj; **/*.sln; **/*.vssscc **/*.cs; **/*.resx**/*.cs; **/*.resx

Nota

Il criterio GLOB Exclude esclude sempre le cartelle ./bin e ./obj, rappresentate rispettivamente dalle proprietà MSBuild $(BaseOutputPath) e $(BaseIntermediateOutputPath).Exclude glob always excludes the ./bin and ./obj folders, which are represented by the $(BaseOutputPath) and $(BaseIntermediateOutputPath) MSBuild properties, respectively. Nel complesso, tutte le esclusioni sono rappresentate da $(DefaultItemExcludes).As a whole, all excludes are represented by $(DefaultItemExcludes).

Se si tenta di compilare un progetto contenente GLOB con l'SDK più recente, viene visualizzato l'errore seguente:If you have globs in your project and you try to build it using the newest SDK, you'll get the following error:

Duplicate Compile items were included. (Sono stati inclusi elementi di compilazione duplicati)Duplicate Compile items were included. The .NET SDK includes Compile items from your project directory by default. (Per impostazione predefinita, .NET SDK include elementi Compile della directory di progetto)The .NET SDK includes Compile items from your project directory by default. You can either remove these items from your project file, or set the 'EnableDefaultCompileItems' property to 'false' if you want to explicitly include them in your project file. (Rimuovere questi elementi dal file di progetto o impostare la proprietà 'EnableDefaultCompileItems' su 'false' se li si vuole includere esplicitamente nel file di progetto)You can either remove these items from your project file, or set the 'EnableDefaultCompileItems' property to 'false' if you want to explicitly include them in your project file.

Per ovviare a questo errore, è possibile rimuovere gli elementi Compile corrispondenti a quelli elencati nella tabella precedente oppure impostare la proprietà <EnableDefaultCompileItems> su false, come segue:In order to get around this error, you can either remove the explicit Compile items that match the ones listed on the previous table, or you can set the <EnableDefaultCompileItems> property to false, like this:

<PropertyGroup>
    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>
</PropertyGroup>

Se si imposta questa proprietà su false, si disabilita l'inclusione implicita e viene ripristinato il comportamento degli SDK precedenti, in cui era necessario specificare i GLOB predefiniti nel progetto.Setting this property to false will disable implicit inclusion, reverting to the behavior of previous SDKs where you had to specify the default globs in your project.

Questa modifica non influisce sulle funzioni principali delle altre dichiarazioni Include.This change does not modify the main mechanics of other includes. Se tuttavia si vogliono specificare, ad esempio, alcuni file da pubblicare con l'app, è ancora possibile usare i meccanismi noti in csproj, ad esempio l'elemento <Content>.However, if you wish to specify, for example, some files to get published with your app, you can still use the known mechanisms in csproj for that (for example, the <Content> element).

<EnableDefaultCompileItems> disabilita solo i glob Compile ma non influisce su altri glob, come il glob implicito None, che si applica anche agli elementi *.cs.<EnableDefaultCompileItems> only disables Compile globs but doesn't affect other globs, like the implicit None glob, which also applies to *.cs items. Per questo motivo, Esplora soluzioni continuerà a visualizzare elementi *.cs come parte del progetto, inclusi come elementi None.Because of that, Solution Explorer will continue show *.cs items as part of the project, included as None items. Analogamente, è possibile impostare <EnableDefaultNoneItems> sul False per disabilitare il criterio GLOB None implicito nel modo seguente:In a similar way, you can set <EnableDefaultNoneItems> to false to disable the implicit None glob, like this:

<PropertyGroup>
    <EnableDefaultNoneItems>false</EnableDefaultNoneItems>
</PropertyGroup>

Per disabilitare tutti i glob impliciti, è possibile impostare la proprietà <EnableDefaultItems> su false come nell'esempio seguente:To disable all implicit globs, you can set the <EnableDefaultItems> property to false as in the following example:

<PropertyGroup>
    <EnableDefaultItems>false</EnableDefaultItems>
</PropertyGroup>

Visualizzare l'intero progetto come lo vede MSBuildHow to see the whole project as MSBuild sees it

Mentre le modifiche di csproj semplificano notevolmente i file di progetto, si potrebbe voler vedere il progetto completamente espanso come lo vede MSBuild dopo che vengono inclusi l'SDK e le relative destinazioni.While those csproj changes greatly simplify project files, you might want to see the fully expanded project as MSBuild sees it once the SDK and its targets are included. Pre-elaborare il progetto con l'opzione /pp del comando dotnet msbuild, che specifica i file importati, le relative risorse e i relativi contributi alla build senza compilare il progetto:Preprocess the project with the /pp switch of the dotnet msbuild command, which shows which files are imported, their sources, and their contributions to the build without actually building the project:

dotnet msbuild -pp:fullproject.xml

Se il progetto contiene più framework di destinazione, i risultati del comando devono essere destinati solo a uno di essi specificandolo come proprietà di MSBuild:If the project has multiple target frameworks, the results of the command should be focused on only one of them by specifying it as an MSBuild property:

dotnet msbuild -p:TargetFramework=netcoreapp2.0 -pp:fullproject.xml

AggiornamentiAdditions

Attributo SdkSdk attribute

L'elemento radice <Project> del file con estensione csproj ha un nuovo attributo, denominato Sdk.The root <Project> element of the .csproj file has a new attribute called Sdk. Sdk specifica l'SDK che viene usato dal progetto.Sdk specifies which SDK will be used by the project. l'SDK, come descritto dal documento sui livelli, è un set di attività e destinazioni di MSBuild che consente di compilare codice .NET Core.The SDK, as the layering document describes, is a set of MSBuild tasks and targets that can build .NET Core code. Per .NET Core sono disponibili gli SDK seguenti:The following SDKs are available for .NET Core:

  1. .NET Core SDK con l'ID di Microsoft.NET.SdkThe .NET Core SDK with the ID of Microsoft.NET.Sdk
  2. .NET Core Web SDK con l'ID di Microsoft.NET.Sdk.WebThe .NET Core web SDK with the ID of Microsoft.NET.Sdk.Web
  3. .NET Core Razor Class Library SDK con l'ID di Microsoft.NET.Sdk.RazorThe .NET Core Razor Class Library SDK with the ID of Microsoft.NET.Sdk.Razor
  4. Il servizio del ruolo di lavoro di .NET Core con ID Microsoft.NET.Sdk.Worker (a partire da .NET Core 3,0)The .NET Core Worker Service with the ID of Microsoft.NET.Sdk.Worker (since .NET Core 3.0)
  5. WinForms di .NET Core e WPF con ID Microsoft.NET.Sdk.WindowsDesktop (a partire da .NET Core 3,0)The .NET Core WinForms and WPF with the ID of Microsoft.NET.Sdk.WindowsDesktop (since .NET Core 3.0)

Per usare gli strumenti di .NET Core e compilare il codice, è necessario impostare l'attributo Sdk su uno di questi ID nell'elemento <Project>.You need to have the Sdk attribute set to one of those IDs on the <Project> element in order to use the .NET Core tools and build your code.

PackageReferencePackageReference

Un elemento <PackageReference> specifica una dipendenza NuGet nel progetto.A <PackageReference> item element specifies a NuGet dependency in the project. L'attributo Include specifica l'ID del pacchetto.The Include attribute specifies the package ID.

<PackageReference Include="<package-id>" Version="" PrivateAssets="" IncludeAssets="" ExcludeAssets="" />

VersioneVersion

L'attributo Version obbligatorio specifica la versione del pacchetto da ripristinare.The required Version attribute specifies the version of the package to restore. L'attributo rispetta le regole dello schema di numerazione delle versioni NuGet.The attribute respects the rules of the NuGet versioning scheme. Il comportamento predefinito è una versione minima e una corrispondenza inclusiva.The default behavior is a minimum version, inclusive match. Ad esempio, se si specifica Version="1.2.3" equivale alla notazione NuGet [1.2.3, ) e il pacchetto risolto avrà la versione 1.2.3 se disponibile o superiore in caso contrario.For example, specifying Version="1.2.3" is equivalent to NuGet notation [1.2.3, ) and means the resolved package will have the version 1.2.3 if available or greater otherwise.

IncludeAssets, ExcludeAssets e PrivateAssetsIncludeAssets, ExcludeAssets, and PrivateAssets

L'attributo IncludeAssets specifica gli asset appartenenti al pacchetto specificato da <PackageReference> che devono essere usati.IncludeAssets attribute specifies which assets belonging to the package specified by <PackageReference> should be consumed. Per impostazione predefinita, sono inclusi tutti gli asset del pacchetto.By default, all package assets are included.

L'attributo ExcludeAssets specifica gli asset appartenenti al pacchetto specificato da <PackageReference> che non devono essere usati.ExcludeAssets attribute specifies which assets belonging to the package specified by <PackageReference> should not be consumed.

L'attributo PrivateAssets specifica gli asset appartenenti al pacchetto specificato da <PackageReference> che devono essere usati, indicando inoltre che non devono essere trasmessi al progetto successivo.PrivateAssets attribute specifies which assets belonging to the package specified by <PackageReference> should be consumed but not flow to the next project. Gli asset Analyzers, Build e ContentFiles sono privati per impostazione predefinita quando questo attributo non è presente.The Analyzers, Build and ContentFiles assets are private by default when this attribute is not present.

Nota

PrivateAssets equivale all'elemento SuppressParent Project. json/xproj .PrivateAssets is equivalent to the project.json/xproj SuppressParent element.

Questi attributi possono contenere uno o più degli elementi seguenti, separati dal carattere punto e virgola ; se ne vengono elencati vari:These attributes can contain one or more of the following items, separated by the semicolon ; character if more than one is listed:

  • Compile: i contenuti della cartella lib sono disponibili per la compilazione.Compile – the contents of the lib folder are available to compile against.
  • Runtime: il contenuto della cartella di Runtime viene distribuito.Runtime – the contents of the runtime folder are distributed.
  • ContentFiles: vengono usati i contenuti della cartella contentfiles.ContentFiles – the contents of the contentfiles folder are used.
  • Build: vengono usati i props/targets nella cartella Build .Build – the props/targets in the build folder are used.
  • Native: i contenuti degli asset nativi vengono copiati nella cartella di output per il Runtime.Native – the contents from native assets are copied to the output folder for runtime.
  • Analyzers: vengono usati gli analizzatori.Analyzers – the analyzers are used.

In alternativa, l'attributo può contenere:Alternatively, the attribute can contain:

  • None: nessuno degli asset viene usato.None – none of the assets are used.
  • All: vengono usati tutti gli asset.All – all assets are used.

DotNetCliToolReferenceDotNetCliToolReference

Un elemento <DotNetCliToolReference> specifica lo strumento dell'interfaccia della riga di comando che si vuole ripristinare nel contesto del progetto.A <DotNetCliToolReference> item element specifies the CLI tool that the user wants to restore in the context of the project. Si tratta di una sostituzione per il nodo tools in project.json.It's a replacement for the tools node in project.json.

<DotNetCliToolReference Include="<package-id>" Version="" />

Si noti che DotNetCliToolReference è ora deprecato a favore degli strumenti locali di .NET Core.Note that DotNetCliToolReference is now deprecated in favor of .NET Core Local Tools.

VersioneVersion

Version specifica la versione del pacchetto da ripristinare.Version specifies the version of the package to restore. L'attributo rispetta le regole dello schema di numerazione delle versioni NuGet.The attribute respects the rules of the NuGet versioning scheme. Il comportamento predefinito è una versione minima e una corrispondenza inclusiva.The default behavior is a minimum version, inclusive match. Ad esempio, se si specifica Version="1.2.3" equivale alla notazione NuGet [1.2.3, ) e il pacchetto risolto avrà la versione 1.2.3 se disponibile o superiore in caso contrario.For example, specifying Version="1.2.3" is equivalent to NuGet notation [1.2.3, ) and means the resolved package will have the version 1.2.3 if available or greater otherwise.

Identificatori di runtimeRuntimeIdentifiers

L'elemento di proprietà <RuntimeIdentifiers> consente di specificare un elenco delimitato da punto e virgola di identificatori di runtime (RID) per il progetto.The <RuntimeIdentifiers> property element lets you specify a semicolon-delimited list of Runtime Identifiers (RIDs) for the project. I RID consentono di pubblicare distribuzioni autonome.RIDs enable publishing self-contained deployments.

<RuntimeIdentifiers>win10-x64;osx.10.11-x64;ubuntu.16.04-x64</RuntimeIdentifiers>

RuntimeIdentifierRuntimeIdentifier

L'elemento di proprietà <RuntimeIdentifier> consente di specificare un solo identificatore di runtime (RID) per il progetto.The <RuntimeIdentifier> property element allows you to specify only one Runtime Identifier (RID) for the project. Il RID consente di pubblicare una distribuzione autonoma.The RID enables publishing a self-contained deployment.

<RuntimeIdentifier>ubuntu.16.04-x64</RuntimeIdentifier>

Usare invece <RuntimeIdentifiers> (plurale) se è necessario pubblicare per più runtime.Use <RuntimeIdentifiers> (plural) instead if you need to publish for multiple runtimes. <RuntimeIdentifier> può offrire compilazioni più veloci quando è necessario solo un singolo runtime.<RuntimeIdentifier> can provide faster builds when only a single runtime is required.

PackageTargetFallbackPackageTargetFallback

L'elemento di proprietà <PackageTargetFallback> consente di specificare un set di destinazioni compatibili da usare durante il ripristino di pacchetti.The <PackageTargetFallback> property element allows you to specify a set of compatible targets to be used when restoring packages. È progettato per consentire ai pacchetti che usano il TxM (Target x Moniker) di .NET di interagire con pacchetti che non dichiarano un TxM di .NET.It's designed to allow packages that use the dotnet TxM (Target x Moniker) to operate with packages that don't declare a dotnet TxM. Se il progetto usa il TxM di .NET, devono averlo anche tutti i pacchetti da cui il progetto dipende, a meno che non si aggiunga <PackageTargetFallback> al progetto, in modo da rendere compatibili con .NET le piattaforme che non lo sono.If your project uses the dotnet TxM, then all the packages it depends on must also have a dotnet TxM, unless you add the <PackageTargetFallback> to your project in order to allow non-dotnet platforms to be compatible with dotnet.

L'esempio seguente include i fallback per tutte le destinazioni nel progetto:The following example provides the fallbacks for all targets in your project:

<PackageTargetFallback>
    $(PackageTargetFallback);portable-net45+win8+wpa81+wp8
</PackageTargetFallback >

L'esempio seguente specifica i fallback solo per la destinazione netcoreapp2.1:The following example specifies the fallbacks only for the netcoreapp2.1 target:

<PackageTargetFallback Condition="'$(TargetFramework)'=='netcoreapp2.1'">
    $(PackageTargetFallback);portable-net45+win8+wpa81+wp8
</PackageTargetFallback >

Eventi di compilazioneBuild events

Il modo in cui vengono specificati gli eventi di pre-compilazione e post-compilazione nel file di progetto è stato modificato.The way that pre-build and post-build events are specified in the project file has changed. Le proprietà PreBuildEvent e PostBuildEvent non sono consigliate nel formato di progetto in stile SDK, perché le macro come $ (ProjectDir) non vengono risolte.The properties PreBuildEvent and PostBuildEvent are not recommended in the SDK-style project format, because macros such as $(ProjectDir) are not resolved. Il codice seguente, ad esempio, non è più supportato:For example, the following code is no longer supported:

<PropertyGroup>
    <PreBuildEvent>"$(ProjectDir)PreBuildEvent.bat" "$(ProjectDir)..\" "$(ProjectDir)" "$(TargetDir)" />
</PropertyGroup>

Nei progetti in stile SDK usare una destinazione MSBuild denominata PreBuild o PostBuild e impostare la proprietà BeforeTargets per PreBuild o la proprietà AfterTargets per PostBuild.In SDK-style projects, use an MSBuild target named PreBuild or PostBuild and set the BeforeTargets property for PreBuild or the AfterTargets property for PostBuild. Per l'esempio precedente, usare il codice seguente:For the preceding example, use the following code:

<Target Name="PreBuild" BeforeTargets="PreBuildEvent">
    <Exec Command="&quot;$(ProjectDir)PreBuildEvent.bat&quot; &quot;$(ProjectDir)..\&quot; &quot;$(ProjectDir)&quot; &quot;$(TargetDir)&quot;" />
</Target>

<Target Name="PostBuild" AfterTargets="PostBuildEvent">
   <Exec Command="echo Output written to $(TargetDir)" />
</Target>

Nota

È possibile usare qualsiasi nome per le destinazioni di MSBuild, ma l'IDE di Visual Studio riconosce PreBuild e PostBuild destinazioni, quindi è consigliabile usare questi nomi in modo che sia possibile modificare i comandi nell'IDE di Visual Studio.You can use any name for the MSBuild targets, but the Visual Studio IDE recognizes PreBuild and PostBuild targets, so we recommend using those names so that you can edit the commands in the Visual Studio IDE.

Proprietà dei metadati NuGetNuGet metadata properties

Con il passaggio a MSBuild, i metadati di input usati per la creazione di un pacchetto NuGet sono stati spostati da file project.json a file con estensione csproj.With the move to MSBuild, we have moved the input metadata that is used when packing a NuGet package from project.json to .csproj files. Gli input sono proprietà di MSBuild, quindi devono trovarsi all'interno di un gruppo <PropertyGroup>.The inputs are MSBuild properties so they have to go within a <PropertyGroup> group. Di seguito è riportato l'elenco delle proprietà usate come input per il processo di compressione quando si usa il comando dotnet pack o la destinazione Pack MSBuild che fa parte dell'SDK:The following is the list of properties that are used as inputs to the packing process when using the dotnet pack command or the Pack MSBuild target that is part of the SDK:

IsPackableIsPackable

Valore booleano che specifica se dal progetto può essere creato un pacchetto.A Boolean value that specifies whether the project can be packed. Il valore predefinito è true.The default value is true.

PackageVersionPackageVersion

Specifica la versione che avrà il pacchetto risultante.Specifies the version that the resulting package will have. Accetta tutte le forme della stringa di versione NuGet.Accepts all forms of NuGet version string. Il valore predefinito corrisponde al valore di $(Version), vale a dire della proprietà Version nel progetto.Default is the value of $(Version), that is, of the property Version in the project.

PackageIdPackageId

Specifica il nome del pacchetto risultante.Specifies the name for the resulting package. Se non specificato, l'impostazione predefinita per l'operazione pack corrisponde all'uso di AssemblyName o del nome della directory come nome del pacchetto.If not specified, the pack operation will default to using the AssemblyName or directory name as the name of the package.

TitoloTitle

Titolo del pacchetto facilmente comprensibile per l'utente, usato di solito per la visualizzazione dell'interfaccia utente, ad esempio in nuget.org e in Gestione pacchetti in Visual Studio.A human-friendly title of the package, typically used in UI displays as on nuget.org and the Package Manager in Visual Studio. Se non specificato, viene usato l'ID del pacchetto.If not specified, the package ID is used instead.

AutoriAuthors

Elenco delimitato da punti e virgola di autori di pacchetti, corrispondenti ai nomi di profilo in nuget.org. Questi vengono visualizzati nella raccolta NuGet in nuget.org e vengono usati per fare riferimento a pacchetti con gli stessi autori.A semicolon-separated list of packages authors, matching the profile names on nuget.org. These are displayed in the NuGet Gallery on nuget.org and are used to cross-reference packages by the same authors.

PackageDescriptionPackageDescription

Descrizione lunga del pacchetto per la visualizzazione dell'interfaccia utente.A long description of the package for UI display.

DescrizioneDescription

Descrizione lunga per l'assembly.A long description for the assembly. Se PackageDescription non viene specificato, questa proprietà viene utilizzata anche come descrizione del pacchetto.If PackageDescription is not specified, then this property is also used as the description of the package.

Informazioni sul copyright per il pacchetto.Copyright details for the package.

PackageRequireLicenseAcceptancePackageRequireLicenseAcceptance

Valore booleano che specifica se il client deve richiedere al consumer di accettare la licenza del pacchetto prima di installarlo.A Boolean value that specifies whether the client must prompt the consumer to accept the package license before installing the package. Il valore predefinito è false.The default is false.

DevelopmentDependencyDevelopmentDependency

Valore booleano che specifica se il pacchetto è contrassegnato come dipendenza solo per lo sviluppo, impedendo che il pacchetto venga incluso come dipendenza in altri pacchetti.A Boolean value that specifies whether the package is marked as a development-only dependency, which prevents the package from being included as a dependency in other packages. Con PackageReference (NuGet 4.8 +), questo flag indica anche che gli asset in fase di compilazione sono esclusi dalla compilazione.With PackageReference (NuGet 4.8+), this flag also means that compile-time assets are excluded from compilation. Per altre informazioni, vedere Supporto di DevelopmentDependency per PackageReference.For more information, see DevelopmentDependency support for PackageReference.

PackageLicenseExpressionPackageLicenseExpression

Un identificatore di licenza SPDX o un'espressione.An SPDX license identifier or expression. Ad esempio, Apache-2.0.For example, Apache-2.0.

Ecco l'elenco completo degli identificatori di licenza SPDX.Here is the complete list of SPDX license identifiers. NuGet.org accetta solo licenze approvate OSI o FSF quando si usa un'espressione del tipo di licenza.NuGet.org accepts only OSI or FSF approved licenses when using license type expression.

La sintassi esatta delle espressioni di licenza è descritta di seguito in ABNF.The exact syntax of the license expressions is described below in ABNF.

license-id            = <short form license identifier from https://spdx.org/spdx-specification-21-web-version#h.luq9dgcle9mo>

license-exception-id  = <short form license exception identifier from https://spdx.org/spdx-specification-21-web-version#h.ruv3yl8g6czd>

simple-expression = license-id / license-id”+”

compound-expression =  1*1(simple-expression /
                simple-expression "WITH" license-exception-id /
                compound-expression "AND" compound-expression /
                compound-expression "OR" compound-expression ) /
                "(" compound-expression ")" )

license-expression =  1*1(simple-expression / compound-expression / UNLICENSED)

Nota

È possibile specificare solo uno degli elementi PackageLicenseExpression, PackageLicenseFile e PackageLicenseUrl contemporaneamente.Only one of PackageLicenseExpression, PackageLicenseFile and PackageLicenseUrl can be specified at a time.

PackageLicenseFilePackageLicenseFile

Percorso di un file di licenza all'interno del pacchetto se si usa una licenza a cui non è stato assegnato un identificatore SPDX oppure una licenza personalizzata (in caso contrario, è preferibile l'elemento PackageLicenseExpression)Path to a license file within the package if you are using a license that hasn’t been assigned an SPDX identifier, or it is a custom license (Otherwise PackageLicenseExpression is preferred)

Sostituisce PackageLicenseUrl, non può essere combinato con PackageLicenseExpressione richiede Visual Studio versione 15.9.4 e .NET SDK 2.1.502 o 2.2.101 o versioni successive.Replaces PackageLicenseUrl, can't be combined with PackageLicenseExpression, and requires Visual Studio version 15.9.4 and .NET SDK 2.1.502 or 2.2.101 or newer.

Sarà necessario assicurarsi che il file di licenza venga incluso nel pacchetto aggiungendolo in modo esplicito al progetto, come in questo esempio di utilizzo:You will need to ensure the license file is packed by adding it explicitly to the project, example usage:

<PropertyGroup>
  <PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
</PropertyGroup>
<ItemGroup>
  <None Include="licenses\LICENSE.txt" Pack="true" PackagePath="$(PackageLicenseFile)"/>
</ItemGroup>

PackageLicenseUrlPackageLicenseUrl

URL della licenza applicabile al pacchetto.A URL to the license that is applicable to the package. (deprecato da Visual Studio 15.9.4, .NET SDK 2.1.502 e 2.2.101)(deprecated since Visual Studio 15.9.4, .NET SDK 2.1.502 and 2.2.101)

PackageIconUrlPackageIconUrl

URL di un'immagine 64 x 64 con sfondo trasparente da usare come icona per il pacchetto nella visualizzazione dell'interfaccia utente.A URL for a 64x64 image with transparent background to use as the icon for the package in UI display.

PackageReleaseNotesPackageReleaseNotes

Note sulla versione per il pacchetto.Release notes for the package.

PackageTagsPackageTags

Elenco di tag con valori delimitati da punto e virgola che designa il pacchetto.A semicolon-delimited list of tags that designates the package.

PackageOutputPathPackageOutputPath

Determina il percorso di output in cui verrà rilasciato il pacchetto creato.Determines the output path in which the packed package will be dropped. Il valore predefinito è $(OutputPath).Default is $(OutputPath).

IncludeSymbolsIncludeSymbols

Valore booleano che indica se al momento della creazione del pacchetto deve essere creato un pacchetto aggiuntivo di simboli.This Boolean value indicates whether the package should create an additional symbols package when the project is packed. Il formato del pacchetto di simboli è controllato dalla proprietà SymbolPackageFormat.The symbols package's format is controlled by the SymbolPackageFormat property.

SymbolPackageFormatSymbolPackageFormat

Specifica il formato del pacchetto di simboli.Specifies the format of the symbols package. Se il valore è "symbols.nupkg", verrà creato un pacchetto di simboli legacy con estensione symbols.nupkg che contiene i file PDB, DLL e altri file di output.If "symbols.nupkg", a legacy symbols package will be created with a .symbols.nupkg extension containing PDBs, DLLs, and other output files. Se il valore è "snupkg", verrà creato un pacchetto di simboli snupkg che contiene i file PDB portatili.If "snupkg", a snupkg symbol package will be created containing the portable PDBs. Il valore predefinito è "symbols.nupkg".Default is "symbols.nupkg".

IncludeSourceIncludeSource

Valore booleano che indica se il processo di creazione del pacchetto deve creare un pacchetto di origine.This Boolean value indicates whether the pack process should create a source package. Il pacchetto di origine contiene il codice sorgente della libreria, nonché i file PDB.The source package contains the library's source code as well as PDB files. I file di origine vengono posizionati nella directory src/ProjectName del file del pacchetto risultante.Source files are put under the src/ProjectName directory in the resulting package file.

IsToolIsTool

Specifica se tutti i file di output devono essere copiati nella cartella tools anziché nella cartella lib.Specifies whether all output files are copied to the tools folder instead of the lib folder. Si tratta di un valore diverso da un DotNetCliTool, che viene specificato impostando il PackageType nel file con estensione csproj .This is different from a DotNetCliTool, which is specified by setting the PackageType in the .csproj file.

RepositoryUrlRepositoryUrl

Specifica l'URL per l'archivio in cui si trova il codice sorgente per il pacchetto e/o da cui il codice sorgente viene compilato.Specifies the URL for the repository where the source code for the package resides and/or from which it's being built.

RepositoryTypeRepositoryType

Specifica il tipo dell'archivio.Specifies the type of the repository. Il valore predefinito è "git".Default is "git".

RepositoryBranchRepositoryBranch

Specifica il nome del ramo di origine nel repository.Specifies the name of the source branch in the repository. Quando il progetto viene incluso in un pacchetto NuGet, viene aggiunto ai metadati del pacchetto.When the project is packaged in a NuGet package, it's added to the package metadata.

RepositoryCommitRepositoryCommit

Commit o insieme di modifiche facoltativo del repository per indicare l'origine su cui è stato compilato il pacchetto.Optional repository commit or changeset to indicate which source the package was built against. per includere questa proprietà, è necessario specificare anche RepositoryUrl.RepositoryUrl must also be specified for this property to be included. Quando il progetto viene incluso in un pacchetto NuGet, questo commit o insieme di modifiche viene aggiunto ai metadati del pacchetto.When the project is packaged in a NuGet package, this commit or changeset is added to the package metadata.

NoPackageAnalysisNoPackageAnalysis

Specifica che pack non deve eseguire l'analisi del pacchetto dopo la compilazione di quest'ultimo.Specifies that pack should not run package analysis after building the package.

MinClientVersionMinClientVersion

Specifica la versione minima del client NuGet, imposta da nuget.exe e da Gestione pacchetti di Visual Studio, che può installare questo pacchetto.Specifies the minimum version of the NuGet client that can install this package, enforced by nuget.exe and the Visual Studio Package Manager.

IncludeBuildOutputIncludeBuildOutput

Questo valore booleano specifica se gli assembly di output di compilazione devono essere compressi nel file con estensione nupkg o meno.This Boolean value specifies whether the build output assemblies should be packed into the .nupkg file or not.

IncludeContentInPackIncludeContentInPack

Questo valore booleano specifica se gli elementi con tipo Content verranno inclusi automaticamente nel pacchetto risultante.This Boolean value specifies whether any items that have a type of Content will be included in the resulting package automatically. Il valore predefinito è true.The default is true.

BuildOutputTargetFolderBuildOutputTargetFolder

Specifica la cartella in cui inserire gli assembly di output.Specifies the folder where to place the output assemblies. Gli assembly di output (e altri file di output) vengono copiati nelle rispettive cartelle per framework.The output assemblies (and other output files) are copied into their respective framework folders.

ContentTargetFoldersContentTargetFolders

Questa proprietà specifica il percorso predefinito in cui devono essere posizionati tutti i file di contenuto se per tali file PackagePath non è specificato.This property specifies the default location of where all the content files should go if PackagePath is not specified for them. Il valore predefinito è "content;contentFiles".The default value is "content;contentFiles".

NuspecFileNuspecFile

Percorso relativo o assoluto per il file .nuspec usato per la creazione del pacchetto.Relative or absolute path to the .nuspec file being used for packing.

Nota

Se il file .nuspec è specificato, viene usato esclusivamente per le informazioni di creazione del pacchetto e le informazioni nei progetti non vengono usate.If the .nuspec file is specified, it's used exclusively for packaging information and any information in the projects is not used.

NuspecBasePathNuspecBasePath

Percorso di base per il file .nuspec.Base path for the .nuspec file.

NuspecPropertiesNuspecProperties

Elenco con valori delimitati da punto e virgola di coppie chiave=valore.Semicolon separated list of key=value pairs.

Proprietà AssemblyInfoAssemblyInfo properties

Gli attributi dell'assembly che in genere erano presenti in un file AssemblyInfo ora vengono automaticamente generati dalle proprietà.Assembly attributes that were typically present in an AssemblyInfo file are now automatically generated from properties.

Proprietà dei singoli attributiProperties per attribute

Come illustrato nella tabella seguente, ogni attributo dispone di una proprietà che ne controlla il contenuto e un'altra che disabilita la generazione:As shown in the following table, each attribute has a property that controls its content and another that disables its generation:

AttributoAttribute ProprietàProperty Proprietà da disabilitareProperty to disable
AssemblyCompanyAttribute Company GenerateAssemblyCompanyAttribute
AssemblyConfigurationAttribute Configuration GenerateAssemblyConfigurationAttribute
AssemblyCopyrightAttribute Copyright GenerateAssemblyCopyrightAttribute
AssemblyDescriptionAttribute Description GenerateAssemblyDescriptionAttribute
AssemblyFileVersionAttribute FileVersion GenerateAssemblyFileVersionAttribute
AssemblyInformationalVersionAttribute InformationalVersion GenerateAssemblyInformationalVersionAttribute
AssemblyProductAttribute Product GenerateAssemblyProductAttribute
AssemblyTitleAttribute AssemblyTitle GenerateAssemblyTitleAttribute
AssemblyVersionAttribute AssemblyVersion GenerateAssemblyVersionAttribute
NeutralResourcesLanguageAttribute NeutralLanguage GenerateNeutralResourcesLanguageAttribute

Note:Notes:

  • Per impostazione predefinita, AssemblyVersion e FileVersion usano il valore di $(Version) senza suffisso.AssemblyVersion and FileVersion default is to take the value of $(Version) without suffix. Se ad esempio $(Version) è 1.2.3-beta.4, il valore sarà 1.2.3.For example, if $(Version) is 1.2.3-beta.4, then the value would be 1.2.3.
  • Il valore predefinito di InformationalVersion è $(Version).InformationalVersion defaults to the value of $(Version).
  • A InformationalVersion viene aggiunto $(SourceRevisionId) se la proprietà è presente.InformationalVersion has $(SourceRevisionId) appended if the property is present. Può essere disabilitata usando IncludeSourceRevisionInInformationalVersion.It can be disabled using IncludeSourceRevisionInInformationalVersion.
  • Le proprietà Copyright e Description vengono usate anche per i metadati NuGet.Copyright and Description properties are also used for NuGet metadata.
  • Configuration viene condivisa con tutto il processo di compilazione e impostata tramite il parametro --configuration dei comandi dotnet.Configuration is shared with all the build process and set via the --configuration parameter of dotnet commands.

GenerateAssemblyInfoGenerateAssemblyInfo

Valore booleano che abilita o disabilita tutta la generazione di AssemblyInfo.A Boolean that enable or disable all the AssemblyInfo generation. Il valore predefinito è true.The default value is true.

GeneratedAssemblyInfoFileGeneratedAssemblyInfoFile

Percorso del file di informazioni sull'assembly generato.The path of the generated assembly info file. L'impostazione predefinita è un file nella directory $(IntermediateOutputPath) (obj).Default to a file in the $(IntermediateOutputPath) (obj) directory.