Erweiterungen des CSPROJ-Formats für .NET CoreAdditions to the csproj format for .NET Core

In diesem Dokument werden die Änderungen erläutert, die an die Projektdateien beim Wechsel von project.json auf csproj und MSBuild hinzugefügt wurden.This document outlines the changes that were added to the project files as part of the move from project.json to csproj and MSBuild. Weitere Informationen über die allgemeine Projektdateisyntax und eine Referenz finden Sie in der Dokumentation zur MSBuild-Projektdatei.For more information about general project file syntax and reference, see the MSBuild project file documentation.

Implizite PaketverweiseImplicit package references

Es wird implizit auf Metapakete verwiesen, basierend auf der Grundlage des/der Zielfameworks, das/die in der <TargetFramework>- oder <TargetFrameworks>-Eigenschaft Ihrer Projektdatei angegeben wurde/n.Metapackages are implicitly referenced based on the target framework(s) specified in the <TargetFramework> or <TargetFrameworks> property of your project file. <TargetFrameworks> wird ignoriert, wenn <TargetFramework> angegeben wird, egal wie die Reihenfolge ist.<TargetFrameworks> is ignored if <TargetFramework> is specified, independent of order.

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

EmpfehlungenRecommendations

Da implizit auf die Microsoft.NETCore.App- oder NETStandard.Library-Metapakete verwiesen wird, sehen Sie im Folgenden unsere empfohlenen bewährten Methoden:Since Microsoft.NETCore.App or NETStandard.Library metapackages are implicitly referenced, the following are our recommended best practices:

  • Wenn .NET Core oder .NET Standard angezielt wird, darf nie ein expliziter Verweis auf die Microsoft.NETCore.App- oder NETStandard.Library-Metapakete über das <PackageReference>-Element in Ihrer Projektdatei vorhanden sein.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.
  • Wenn Sie .NET Core anzielen und eine bestimmte Version der Runtime benötigen, sollten Sie die <RuntimeFrameworkVersion>-Eigenschaft in Ihrem Projekt (z.B. 1.0.4) verwenden, anstatt auf Metapakete zu verweisen.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.
  • Wenn Sie .NET Standard anzielen und eine bestimmte Version der NETStandard.Library-Metapakete benötigen, können Sie die <NetStandardImplicitPackageVersion>-Eigenschaft verwenden und die Version festlegen, die Sie benötigen.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.
  • Fügen Sie dem Microsoft.NETCore.App- oder NETStandard.Library-Metapaket in .NET Framework-Projekten nicht explizit Verweise hinzu, und aktualisieren Sie diese auch nicht.Don't explicitly add or update references to either the Microsoft.NETCore.App or NETStandard.Library metapackage in .NET Framework projects. Wenn bei der Verwendung eines auf .NET Standard basierenden NuGet-Pakets eine bestimmte Version von NETStandard.Library benötigt wird, installiert NuGet diese automatisch.If any version of NETStandard.Library is needed when using a .NET Standard-based NuGet package, NuGet automatically installs that version.

Implizite Version für einige PaketverweiseImplicit version for some package references

Die meisten Anwendungen von <PackageReference> erfordern das Festlegen des Attributs Version, um die zu verwendende NuGet-Paketversion anzugeben.Most usages of <PackageReference> require setting the Version attribute to specify the NuGet package version to be used. Bei Verwendung von .NET Core 2.1 oder 2.2 und Verweis auf Microsoft.AspNetCore.App oder Microsoft.AspNetCore.All ist das Attribut jedoch nicht erforderlich.When using .NET Core 2.1 or 2.2 and referencing Microsoft.AspNetCore.App or Microsoft.AspNetCore.All, however, the attribute is unnecessary. Das .NET Core SDK kann automatisch die Version dieser Pakete auswählen, die verwendet werden soll.The .NET Core SDK can automatically select the version of these packages that should be used.

EmpfehlungRecommendation

Wenn Sie auf die Pakete Microsoft.AspNetCore.App oder Microsoft.AspNetCore.All verweisen, geben Sie deren Version nicht an.When referencing the Microsoft.AspNetCore.App or Microsoft.AspNetCore.All packages, do not specify their version. Wenn eine Version angegeben wird, kann das SDK eine Warnung NETSDK1071 ausgeben.If a version is specified, the SDK may produce warning NETSDK1071. Um diese Warnung zu beheben, entfernen Sie die Paketversion wie im folgenden Beispiel:To fix this warning, remove the package version like in the following example:

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

Bekanntes Problem: Das.NET Core 2.1 SDK unterstützte diese Syntax nur, wenn das Projekt auch „Microsoft.NET.Sdk.Web“ verwendet.Known issue: the .NET Core 2.1 SDK only supported this syntax when the project also uses Microsoft.NET.Sdk.Web. Dies wird im .NET Core SDK 2.2 gelöst.This is resolved in the .NET Core 2.2 SDK.

Diese Verweise auf ASP.NET Core-Metapakete haben ein etwas anderes Verhalten als die meisten normalen NuGet-Pakete.These references to ASP.NET Core metapackages have a slightly different behavior from most normal NuGet packages. Frameworkabhängige Bereitstellungen von Anwendungen, die das Metapaket verwenden, profitieren automatisch vom freigegebenen ASP.NET Core-Framework.Framework-dependent deployments of applications that use these metapackages automatically take advantage of the ASP.NET Core shared framework. Bei Verwendung des Metapakets werden keine Objekte aus den referenzierten NuGet-Paketen für ASP.NET Core mit der Anwendung bereitgestellt. Das freigegebene ASP.NET Core-Framework enthält diese Objekte.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. Die Objekte im freigegebenen Framework sind zur Verbesserung der Startzeit für die Zielplattform optimiert.The assets in the shared framework are optimized for the target platform to improve application startup time. Weitere Informationen zu freigegebenen Frameworks finden Sie unter Packen von .NET Core-Verteilungen.For more information about shared framework, see .NET Core distribution packaging.

Wenn eine Version angegeben ist, wird sie als Mindestversion des ASP.NET Core Shared Framework-abhängigen Frameworks und als exakte Version für eigenständige Bereitstellungen behandelt.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. Dies kann folgenden Konsequenzen haben:This can have the following consequences:

  • Wenn die auf dem Server installierte Version von ASP.NET Core kleiner ist als die in der „PackageReference“ angegebene Version, kann der .NET Core-Prozess nicht gestartet werden.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. Aktualisierungen des Metapakets sind oft auf NuGet.org verfügbar, bevor Updates in Hostingumgebungen wie Azure bereitgestellt werden.Updates to the metapackage are often available on NuGet.org before updates have been made available in hosting environments such as Azure. Das Aktualisieren der Version auf PackageReference auf ASP.NET Core kann dazu führen, dass eine bereitgestellte Anwendung fehlschlägt.Updating the version on the PackageReference to ASP.NET Core could cause a deployed application to fail.
  • Wenn die Anwendung als eigenständige Bereitstellung bereitgestellt wird, enthält die Anwendung möglicherweise nicht die neuesten Sicherheitsupdates für .NET Core.If the application is deployed as a self-contained deployment, the application may not contain the latest security updates to .NET Core. Wenn keine Version angegeben ist, kann das SDK automatisch die neueste Version von ASP.NET Core in die eigenständige Bereitstellung aufnehmen.When a version isn't specified, the SDK can automatically include the newest version of ASP.NET Core in the self-contained deployment.

Standardkompilierung in .NET Core-ProjektenDefault compilation includes in .NET Core projects

Beim Wechsel zum csproj-Format in den neuesten SDK-Versionen, haben wir die Standardaufnahmen- und ausschlüsse für Compile-Elemente und eingebettete Ressourcen zu den SDK-Eigenschaftendateien verschoben.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. Dies bedeutet, dass Sie diese Elemente nicht länger in Ihrer Projektdatei angeben müssen.This means that you no longer need to specify these items in your project file.

Der Hauptgrund dafür ist die Übersichtlichkeit in Ihrer Projektdatei.The main reason for doing this is to reduce the clutter in your project file. Die Standardeinstellungen im SDK sollten die gängigen Anwendungsbeispiele abdecken. Es besteht keine Notwendigkeit, sie in jedem Projekt zu wiederholen, das Sie erstellen.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. Dies führt zu kleineren Projektdateien, die viel einfacher zu verstehen und bei Bedarf auch manuell zu bearbeiten sind.This leads to smaller project files that are much easier to understand as well as edit by hand, if needed.

Die folgende Tabelle zeigt, welche Elemente und welche Globs im SDK enthalten und ausgeschlossen sind:The following table shows which element and which globs are both included and excluded in the SDK:

ElementElement Glob einschließenInclude glob Glob ausschließenExclude glob Glob entfernenRemove glob
CompileCompile **/*.cs (oder andere Spracherweiterungen)**/*.cs (or other language extensions) **/*.user; **/*.*proj; **/*.sln; **/*.vssscc**/*.user; **/*.*proj; **/*.sln; **/*.vssscc Nicht zutreffendN/A
EmbeddedResourceEmbeddedResource **/*.resx**/*.resx **/*.user; **/*.*proj; **/*.sln; **/*.vssscc**/*.user; **/*.*proj; **/*.sln; **/*.vssscc Nicht zutreffendN/A
KeineNone **/* **/*.user; **/*.*proj; **/*.sln; **/*.vssscc**/*.user; **/*.*proj; **/*.sln; **/*.vssscc **/*.cs; **/*.resx**/*.cs; **/*.resx

Hinweis

Glob ausschließen schließt immer die Ordner ./bin und ./obj aus, die von den MSBuild-Eigenschaften $(BaseOutputPath) und $(BaseIntermediateOutputPath) dargestellt werden.Exclude glob always excludes the ./bin and ./obj folders, which are represented by the $(BaseOutputPath) and $(BaseIntermediateOutputPath) MSBuild properties, respectively. Als Ganzes werden alle Ausschlüsse von $(DefaultItemExcludes) dargestellt.As a whole, all excludes are represented by $(DefaultItemExcludes).

Wenn Sie über Globs in Ihrem Projekt verfügen, und Sie versuchen, es mit dem neuesten SDK zu erstellen, erhalten Sie den folgenden Fehler:If you have globs in your project and you try to build it using the newest SDK, you'll get the following error:

Doppelte Compile-Elemente waren enthalten.Duplicate Compile items were included. .NET SDK enthält Compile-Elemente aus Ihrem Projektverzeichnis in der Standardeinstellung.The .NET SDK includes Compile items from your project directory by default. Sie können diese Elemente aus Ihrer Projektdatei entfernen oder die Eigenschaft „EnableDefaultCompileItems“ auf „FALSE“ festlegen, wenn Sie sie explizit in Ihrer Projektdatei einfügen möchten.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.

Um diesen Fehler zu umgehen, können Sie entweder die expliziten Compile-Elemente entfernen, die mit denen übereinstimmen, die in der vorherigen Tabelle aufgeführt sind, oder Sie können die <EnableDefaultCompileItems>-Eigenschaft auf false wie folgt festlegen: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>

Wenn diese Eigenschaft auf false festgelegt wird, wird der implizite Einschluss deaktiviert, und das Verhalten wird wieder auf das der vorherigen SDKs festgelegt. Bei diesem Verhalten müssen Sie die Standardglobs in Ihrem Projekt festlegen.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.

Diese Änderung ändert die Hauptfunktionsweise anderer Aufnahmen nicht.This change does not modify the main mechanics of other includes. Wenn Sie z.B. einige Dateien angeben möchten, die mit Ihrer Anwendung veröffentlicht werden, können Sie weiterhin die bekannten Mechanismen in csproj dafür nutzen (z.B. das <Content>-Element).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> deaktiviert nur Compile-Globmuster, wirkt sich jedoch nicht auf andere Globmuster wie das implizite None-Globmuster aus, das ebenfalls für *.cs-Elemente gilt.<EnableDefaultCompileItems> only disables Compile globs but doesn't affect other globs, like the implicit None glob, which also applies to *.cs items. Deshalb zeigt Projektmappen-Explorer die *.cs-Elemente weiterhin als Teil des Projekts an, die als None-Elemente eingebunden wurden.Because of that, Solution Explorer will continue show *.cs items as part of the project, included as None items. Sie können ebenso <EnableDefaultNoneItems> auf FALSE festlegen, um das implizite None-Globmuster zu deaktivieren, so wie hier dargestellt:In a similar way, you can set <EnableDefaultNoneItems> to false to disable the implicit None glob, like this:

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

Sie können die <EnableDefaultItems>-Eigenschaft wie im folgenden Beispiel auf false festlegen, um alle impliziten Globmuster zu deaktivieren:To disable all implicit globs, you can set the <EnableDefaultItems> property to false as in the following example:

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

Anzeige des gesamten Projekts wie in MSBuildHow to see the whole project as MSBuild sees it

Obwohl diese csproj-Änderungen für eine erhebliche Vereinfachung der Projektdateien sorgen, möchten Sie vielleicht das vollständig erweiterte Projekt anzeigen, so wie es von MSBuild erkannt wird, nachdem das SDK und die zugehörigen Ziele eingeschlossen wurden.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. Führen Sie eine Vorverarbeitung des Projekts mit der /pp-Option des Befehls dotnet msbuild durch. Dieser zeigt die importierten Dateien, ihre Quellen und ihren Beitrag zum Build, ohne das Projekt tatsächlich zu erstellen: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

Wenn das Projekt mehrere Zielframeworks umfasst, sollten nur Ergebnisse für ein Framework ausgegeben werden, indem dieses als MSBuild-Eigenschaft angegeben wird: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

ErweiterungenAdditions

SDK-AttributSdk attribute

Das <Project>-Stammelement der CSPROJ-Datei hat ein neues Attribut namens Sdk.The root <Project> element of the .csproj file has a new attribute called Sdk. Sdk gibt an, welches SDK vom Projekt verwendet wird.Sdk specifies which SDK will be used by the project. Das SDK ist, wie das Schichtendokument beschreibt, ein Satz von MSBuild-Aufgaben und -Zielen, die .NET Core-Code erstellen können.The SDK, as the layering document describes, is a set of MSBuild tasks and targets that can build .NET Core code. Für .NET Core sind die folgenden SDKs verfügbar:The following SDKs are available for .NET Core:

  1. Das .NET Core SDK mit der Microsoft.NET.Sdk-IDThe .NET Core SDK with the ID of Microsoft.NET.Sdk
  2. Das .NET Core Web-SDK mit der Microsoft.NET.Sdk.Web-IDThe .NET Core web SDK with the ID of Microsoft.NET.Sdk.Web
  3. Das .NET Core Razor-Klassenbibliothek SDK mit der ID von Microsoft.NET.Sdk.RazorThe .NET Core Razor Class Library SDK with the ID of Microsoft.NET.Sdk.Razor
  4. Der .NET Core-Workerdienst mit der ID Microsoft.NET.Sdk.Worker (seit .NET Core 3.0)The .NET Core Worker Service with the ID of Microsoft.NET.Sdk.Worker (since .NET Core 3.0)
  5. .NET Core WinForms und WPF mit der ID Microsoft.NET.Sdk.WindowsDesktop (seit .NET Core 3.0)The .NET Core WinForms and WPF with the ID of Microsoft.NET.Sdk.WindowsDesktop (since .NET Core 3.0)

Das Sdk-Attribut muss auf eine dieser IDs auf dem <Project>-Element festgelegt werden, um die .NET Core-Tools nutzen und Codes erstellen zu können.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

Ein <PackageReference>-Element gibt eine NuGet-Abhängigkeit im Projekt an.A <PackageReference> item element specifies a NuGet dependency in the project. Das Include-Attribut gibt die Paket-ID an.The Include attribute specifies the package ID.

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

VersionVersion

Das erforderliche Attribut Version gibt die Version des wiederherzustellenden Pakets an.The required Version attribute specifies the version of the package to restore. Das Attribut berücksichtigt die Regeln für den NuGet-Versionsbereich.The attribute respects the rules of the NuGet version range scheme. Das Standardverhalten ist eine Mindestversion einschließlich der Übereinstimmung.The default behavior is a minimum version, inclusive match. Wenn Sie z. B. Version="1.2.3" angeben, entspricht dies der NuGet-Notation [1.2.3, ) und bedeutet, dass das aufgelöste Paket Version 1.2.3 oder höher aufweist (sofern verfügbar).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 und PrivateAssetsIncludeAssets, ExcludeAssets, and PrivateAssets

Das IncludeAssets-Attribut gibt an, welche Objekte, die zu dem durch <PackageReference> angegebenen Paket gehören, genutzt werden sollen.IncludeAssets attribute specifies which assets belonging to the package specified by <PackageReference> should be consumed. Standardmäßig sind alle Paketobjekte enthalten.By default, all package assets are included.

Das ExcludeAssets-Attribut gibt an, welche Objekte, die zu dem durch <PackageReference> angegebenen Paket gehören, nicht genutzt werden sollen.ExcludeAssets attribute specifies which assets belonging to the package specified by <PackageReference> should not be consumed.

Das PrivateAssets-Attribut gibt an, welche Objekte, die zu dem durch <PackageReference> angegebenen Paket gehören, genutzt, aber nicht an das nächste Projekt übertragen werden sollen.PrivateAssets attribute specifies which assets belonging to the package specified by <PackageReference> should be consumed but not flow to the next project. Die Objekte Analyzers, Build und ContentFiles sind standardmäßig privat, wenn dieses Attribut nicht vorhanden ist.The Analyzers, Build and ContentFiles assets are private by default when this attribute is not present.

Hinweis

PrivateAssets entspricht dem SuppressParent-Element project.json/xproj.PrivateAssets is equivalent to the project.json/xproj SuppressParent element.

Diese Attribute können eines oder mehrere der folgenden Elemente enthalten, getrennt durch das Semikolon ;-Zeichen, wenn mehr als eines aufgeführt ist:These attributes can contain one or more of the following items, separated by the semicolon ; character if more than one is listed:

  • Compile gibt an, dass die Inhalte des Ordners lib zum Kompilieren verfügbar sind.Compile – the contents of the lib folder are available to compile against.
  • Runtime gibt an, dass die Inhalte des Ordners runtime verteilt werden.Runtime – the contents of the runtime folder are distributed.
  • ContentFiles: Gibt an, dass die Inhalte des contentfiles-Ordner verwendet werden.ContentFiles – the contents of the contentfiles folder are used.
  • Build gibt an, dass die Eigenschaften/Ziele im Ordner build verwendet werden.Build – the props/targets in the build folder are used.
  • Native gibt an, dass die Inhalte nativer Objekte für die Runtime in den Ausgabeordner kopiert werden.Native – the contents from native assets are copied to the output folder for runtime.
  • Analyzers: Gibt an, dass Analysen verwendet werdenAnalyzers – the analyzers are used.

Alternativ kann das Attribut Folgendes enthalten:Alternatively, the attribute can contain:

  • None: Keines der Objekte wird verwendet.None – none of the assets are used.
  • All: Alle Objekte werden verwendet.All – all assets are used.

DotNetCliToolReferenceDotNetCliToolReference

Ein <DotNetCliToolReference>-Element gibt das CLI-Tool an, das der Benutzer im Kontext des Projekts wiederherstellen möchte.A <DotNetCliToolReference> item element specifies the CLI tool that the user wants to restore in the context of the project. Es ist ein Ersatz für den tools-Knoten in project.json.It's a replacement for the tools node in project.json.

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

Beachten Sie, dass DotNetCliToolReference nun veraltet ist und durch die lokalen .NET Core-Tools ersetzt wird.Note that DotNetCliToolReference is now deprecated in favor of .NET Core Local Tools.

VersionVersion

Version gibt die Version des wiederherzustellenden Pakets an.Version specifies the version of the package to restore. Das Attribut berücksichtigt die Regeln für das NuGet-Versionsschema.The attribute respects the rules of the NuGet versioning scheme. Das Standardverhalten ist eine Mindestversion einschließlich der Übereinstimmung.The default behavior is a minimum version, inclusive match. Wenn Sie z. B. Version="1.2.3" angeben, entspricht dies der NuGet-Notation [1.2.3, ) und bedeutet, dass das aufgelöste Paket Version 1.2.3 oder höher aufweist (sofern verfügbar).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.

RuntimeIdentifiersRuntimeIdentifiers

Das Eigenschaftenelement <RuntimeIdentifiers> ermöglicht die Angabe einer durch Semikolons getrennten Liste von Runtime-IDs (RIDs) für das Projekt.The <RuntimeIdentifiers> property element lets you specify a semicolon-delimited list of Runtime Identifiers (RIDs) for the project. RIDs ermöglichen das Veröffentlichen eigenständiger Bereitstellungen.RIDs enable publishing self-contained deployments.

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

RuntimeIdentifierRuntimeIdentifier

Das Eigenschaftenelement <RuntimeIdentifier> ermöglicht die Angabe von nur einer einzigen Runtime-ID (RID) für das Projekt.The <RuntimeIdentifier> property element allows you to specify only one Runtime Identifier (RID) for the project. RIDs ermöglichen das Veröffentlichen einer eigenständigen Bereitstellung.The RID enables publishing a self-contained deployment.

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

Verwenden Sie stattdessen <RuntimeIdentifiers> (Plural), wenn Sie für mehrere Runtimes eine Veröffentlichung durchführen müssen.Use <RuntimeIdentifiers> (plural) instead if you need to publish for multiple runtimes. Durch <RuntimeIdentifier> können Sie Builds schneller abschließen, wenn nur eine einzige Runtime erforderlich ist.<RuntimeIdentifier> can provide faster builds when only a single runtime is required.

PackageTargetFallbackPackageTargetFallback

Das Eigenschaftenelement <PackageTargetFallback> ermöglicht die Angabe mehrerer kompatibler Ziele, die verwendet werden, wenn Pakete wiederhergestellt werden.The <PackageTargetFallback> property element allows you to specify a set of compatible targets to be used when restoring packages. Dies soll ermöglichen, dass Pakete, in denen das .NET TxM (Target x Moniker) verwendet wird, mit Paketen funktionieren, in denen kein .NET TxM deklariert ist.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. Wird in einem Projekt das .NET TxM verwendet, müssen alle Pakete, zu denen es eine Abhängigkeit gibt, ebenfalls ein .NET TxM haben. Dies trifft nur dann nicht zu, wenn Sie das <PackageTargetFallback>-Element zu Ihrem Projekt hinzufügen, sodass Nicht-.NET-Plattformen mit .NET kompatibel sind.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.

Im folgenden Beispiel werden die Fallbacks für alle Ziele in Ihrem Projekt bereitgestellt:The following example provides the fallbacks for all targets in your project:

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

Im folgenden Beispiel werden nur die Fallbacks für das netcoreapp2.1-Ziel angegeben:The following example specifies the fallbacks only for the netcoreapp2.1 target:

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

BuildereignisseBuild events

Die Art und Weise, wie Präbuild- und Postbuildereignisse in der Projektdatei angegeben werden, hat sich geändert.The way that pre-build and post-build events are specified in the project file has changed. Die Eigenschaften „PreBuildEvent“ und „PostBuildEvent“ werden im SDK-Projektformat nicht empfohlen, da Makros wie $(ProjectDir) nicht aufgelöst werden.The properties PreBuildEvent and PostBuildEvent are not recommended in the SDK-style project format, because macros such as $(ProjectDir) are not resolved. Der folgende Code wird z. B. nicht mehr unterstützt:For example, the following code is no longer supported:

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

Verwenden Sie in Projekten im SDK-Format ein MSBuild-Ziel namens PreBuild oder PostBuild, und legen Sie die Eigenschaft BeforeTargets für PreBuild oder die Eigenschaft AfterTargets für PostBuild fest.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. Verwenden Sie für das vorherige Beispiel den folgenden Code: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>

Hinweis

Sie können einen beliebigen Namen für die MSBuild-Ziele verwenden, aber die Visual Studio-IDE erkennt PreBuild- und PostBuild-Ziele. Daher empfiehlt es sich, diese Namen zu verwenden, damit Sie die Befehle in der Visual Studio-IDE bearbeiten können.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.

NuGet-MetadateneigenschaftenNuGet metadata properties

Mit dem Wechsel zu MSBuild haben wir die Eingabemetadaten, die beim Packen eines NuGet-Pakets verwendet werden, aus project.json in .csproj-Dateien verschoben.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. Die Eingaben sind MSBuild-Eigenschaften, sodass sie in eine <PropertyGroup>-Gruppe wechseln müssen.The inputs are MSBuild properties so they have to go within a <PropertyGroup> group. In der folgenden Liste sind die Eigenschaften aufgeführt, die als Eingaben für den Packvorgang verwendet werden, wenn der Befehl dotnet pack oder das MSBuild-Ziel Pack verwendet wird, das Bestandteil des SDK ist: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

Ein Boolescher Wert, der angibt, ob das Projekt verpackt werden kann.A Boolean value that specifies whether the project can be packed. Der Standardwert ist true.The default value is true.

PackageVersionPackageVersion

Gibt die Version an, die das resultierende Paket haben wird.Specifies the version that the resulting package will have. Akzeptiert alle Arten von NuGet-Versionszeichenfolgen.Accepts all forms of NuGet version string. Standardmäßig beträgt der Wert $(Version) der Eigenschaft Version im Projekt.Default is the value of $(Version), that is, of the property Version in the project.

PackageIdPackageId

Gibt den Namen für das resultierende Paket an.Specifies the name for the resulting package. Wenn nicht angegeben, verwendet der pack-Vorgang standardmäßig AssemblyName oder den Verzeichnisnamen als Paketnamen.If not specified, the pack operation will default to using the AssemblyName or directory name as the name of the package.

TitelTitle

Ein benutzerfreundlicher Titel des Pakets, der in der Regel in der Benutzeroberfläche wie auf nuget.org angezeigt wird und der Paket-Manager 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. Wenn nicht angegeben, wird stattdessen die Paket-ID verwendet.If not specified, the package ID is used instead.

AuthorsAuthors

Eine durch Semikolons getrennte Liste der Paketautoren, die mit Profilnamen unter nuget.org übereinstimmen. Diese werden im NuGet-Katalog unter nuget.org angezeigt und werden verwendet, um Querverweise auf Pakete von den gleichen Autoren zu geben.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

Eine ausführliche Beschreibung des Pakets für die Anzeige der Benutzeroberfläche.A long description of the package for UI display.

BeschreibungDescription

Eine lange Beschreibung für die Assembly.A long description for the assembly. Wenn PackageDescription nicht angegeben ist, wird diese Eigenschaft auch als Beschreibung des Pakets verwendet.If PackageDescription is not specified, then this property is also used as the description of the package.

Copyright-Informationen für das Paket.Copyright details for the package.

PackageRequireLicenseAcceptancePackageRequireLicenseAcceptance

Ein Boolescher Wert, der angibt, ob der Client den Verbraucher dazu auffordern muss, die Paketlizenz vor der Installation des Pakets zu akzeptieren.A Boolean value that specifies whether the client must prompt the consumer to accept the package license before installing the package. Der Standardwert ist false.The default is false.

DevelopmentDependencyDevelopmentDependency

Ein boolescher Wert, der angibt, ob das Paket mit einer Abhängigkeit markiert werden soll, die nur für die Entwicklung gilt, wodurch vermieden wird, dass das Paket als Abhängigkeit in andere Pakete eingefügt wird.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. Bei PackageReference (ab NuGet 4.8) bedeutet dieses Flag auch, dass Objekte zur Kompilierzeit von der Kompilierung ausgeschlossen werden.With PackageReference (NuGet 4.8+), this flag also means that compile-time assets are excluded from compilation. Weitere Informationen finden Sie unter DevelopmentDependency support for PackageReference (DevelopmentDependency-Unterstützung für PackageReference).For more information, see DevelopmentDependency support for PackageReference.

PackageLicenseExpressionPackageLicenseExpression

Ein SPDX Lizenzbezeichner oder ein Ausdruck.An SPDX license identifier or expression. Beispielsweise Apache-2.0.For example, Apache-2.0.

Hier ist die vollständige Liste der SPDX Lizenzbezeichner.Here is the complete list of SPDX license identifiers. NuGet.org akzeptiert nur von OSI oder FSF genehmigte Lizenzen, wenn der Ausdruck „license type“ verwendet wird.NuGet.org accepts only OSI or FSF approved licenses when using license type expression.

Die genaue Syntax für die Lizenzausdrücke wird unten in ABNF beschrieben.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)

Hinweis

PackageLicenseExpression, PackageLicenseFile oder PackageLicenseUrl können jeweils nur einzeln angegeben werden.Only one of PackageLicenseExpression, PackageLicenseFile and PackageLicenseUrl can be specified at a time.

PackageLicenseFilePackageLicenseFile

Pfad zu einer Lizenzdatei innerhalb des Pakets, wenn Sie eine Lizenz verwenden, der kein SPDX-Bezeichner zugewiesen wurde, oder es sich um eine benutzerdefinierte Lizenz handelt (sonst wird PackageLicenseExpression bevorzugt).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)

Ersetzt PackageLicenseUrl, kann nicht mit PackageLicenseExpression kombiniert werden und erfordert Visual Studio 15.9.4 und .NET SDK 2.1.502 oder 2.2.101 oder höher.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.

Sie müssen sicherstellen, dass die Lizenzdatei gepackt ist, indem Sie sie explizit zum Projekt hinzufügen. Beispielnutzung: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

Eine URL für die Lizenz, die auf das Paket angewendet werden kann.A URL to the license that is applicable to the package. (seit Visual Studio 15.9.4, .NET SDK 2.1.502 und 2.2.101 veraltet)(deprecated since Visual Studio 15.9.4, .NET SDK 2.1.502 and 2.2.101)

PackageIconUrlPackageIconUrl

Eine URL für ein 64x64-Bild mit transparentem Hintergrund, das als Symbol für das Paket in der UI-Anzeige verwendet wird.A URL for a 64x64 image with transparent background to use as the icon for the package in UI display.

PackageReleaseNotesPackageReleaseNotes

Anmerkungen zu diesem Paket.Release notes for the package.

PackageTagsPackageTags

Eine durch Semikolons getrennte Liste von Tags, die das Paket festlegt.A semicolon-delimited list of tags that designates the package.

PackageOutputPathPackageOutputPath

Bestimmt den Ausgabepfad, in dem das gepackte Paket abgelegt wird.Determines the output path in which the packed package will be dropped. Der Standardwert ist $(OutputPath).Default is $(OutputPath).

IncludeSymbolsIncludeSymbols

Dieser Boolesche Wert gibt an, ob das Paket ein zusätzliches Symbolpaket erstellen soll, wenn das Projekt verpackt wird.This Boolean value indicates whether the package should create an additional symbols package when the project is packed. Das Format des Symbolpakets wird durch die Eigenschaft SymbolPackageFormat gesteuert.The symbols package's format is controlled by the SymbolPackageFormat property.

SymbolPackageFormatSymbolPackageFormat

Gibt das Format des Symbolpakets an.Specifies the format of the symbols package. Im Fall von „symbols.nupkg“ wird ein älteres Symbolpaket mit der Erweiterung .symbols.nupkg erstellt, das PDB-, DLL- und andere Ausgabedateien enthält.If "symbols.nupkg", a legacy symbols package will be created with a .symbols.nupkg extension containing PDBs, DLLs, and other output files. Im Fall von „snupkg“ wird ein Symbolpaket dieses Typs erstellt, das die portablen PDB-Dateien enthält.If "snupkg", a snupkg symbol package will be created containing the portable PDBs. Der Standardwert ist „symbols.nupkg“.Default is "symbols.nupkg".

IncludeSourceIncludeSource

Dieser Boolesche Wert gibt an, ob der Packprozess ein Quellpaket erstellen sollte.This Boolean value indicates whether the pack process should create a source package. Das Quellpaket enthält den Quellcode der Bibliothek sowie die PDB-Dateien.The source package contains the library's source code as well as PDB files. Quelldateien werden im src/ProjectName-Verzeichnis in der resultierenden Paketdatei gespeichert.Source files are put under the src/ProjectName directory in the resulting package file.

IsToolIsTool

Gibt an, ob alle Ausgabedateien in den Tools-Ordner anstelle des Lib-Ordners kopiert werden.Specifies whether all output files are copied to the tools folder instead of the lib folder. Dies ist anders als ein DotNetCliTool, das angegeben wird, indem PackageType in der CSPROJ-Datei festgelegt wird.This is different from a DotNetCliTool, which is specified by setting the PackageType in the .csproj file.

RepositoryUrlRepositoryUrl

Gibt die URL für das Repository an, in der sich der Quellcode für das Paket befindet und/oder aus der es erstellt wird.Specifies the URL for the repository where the source code for the package resides and/or from which it's being built.

RepositoryTypeRepositoryType

Gibt den Verzeichnistyp an.Specifies the type of the repository. Der Standardwert ist „Git“.Default is "git".

RepositoryBranchRepositoryBranch

Gibt den Namen des Quellbranch im Repository an.Specifies the name of the source branch in the repository. Wenn das Projekt in einem NuGet-Paket gepackt ist, wird es den Paketmetadaten hinzugefügt.When the project is packaged in a NuGet package, it's added to the package metadata.

RepositoryCommitRepositoryCommit

Optionaler Repositorycommit oder ein Changeset, um anzugeben, für welches Quellpaket die Erstellung erfolgt ist.Optional repository commit or changeset to indicate which source the package was built against. RepositoryUrl muss ebenfalls angegeben werden, damit diese Eigenschaft einbezogen wird.RepositoryUrl must also be specified for this property to be included. Wenn das Projekt in einem NuGet-Paket gepackt ist, wird dieser Commit oder das Changeset den Paketmetadaten hinzugefügt.When the project is packaged in a NuGet package, this commit or changeset is added to the package metadata.

NoPackageAnalysisNoPackageAnalysis

Gibt an, dass der Packvorgang keine Paketanalyse nach dem Erstellen des Pakets ausführen sollte.Specifies that pack should not run package analysis after building the package.

MinClientVersionMinClientVersion

Gibt die minimale Version des NuGet-Clients an, der dieses Paket installieren kann. Dies wird von nuget.exe und dem Paket-Manager von Visual Studio erzwungen.Specifies the minimum version of the NuGet client that can install this package, enforced by nuget.exe and the Visual Studio Package Manager.

IncludeBuildOutputIncludeBuildOutput

Dieser Boolesche Wert gibt an, ob die Buildausgabeassemblys in die NUPKG-Datei gepackt werden sollen oder nicht.This Boolean value specifies whether the build output assemblies should be packed into the .nupkg file or not.

IncludeContentInPackIncludeContentInPack

Dieser Boolesche Wert gibt an, ob alle Elemente, die über einen Content-Typ verfügen, automatisch im resultierenden Paket enthalten sind.This Boolean value specifies whether any items that have a type of Content will be included in the resulting package automatically. Der Standardwert ist true.The default is true.

BuildOutputTargetFolderBuildOutputTargetFolder

Gibt den Ordner an, in dem die Ausgabeassemblys abgelegt werden.Specifies the folder where to place the output assemblies. Die Ausgabeassemblys (und andere Ausgabedateien) werden in ihre jeweiligen Frameworkordner kopiert.The output assemblies (and other output files) are copied into their respective framework folders.

ContentTargetFoldersContentTargetFolders

Diese Eigenschaft gibt den Standardspeicherort an, an dem alle Inhaltsdateien gespeichert werden sollten, wenn PackagePath für sie nicht angegeben ist.This property specifies the default location of where all the content files should go if PackagePath is not specified for them. Der Standardwert ist „content;contentFiles“.The default value is "content;contentFiles".

NuspecFileNuspecFile

Relativer oder absoluter Pfad zur .nuspec-Datei, die für die Komprimierung verwendet wird.Relative or absolute path to the .nuspec file being used for packing.

Hinweis

Wenn die .nuspec-Datei angegeben ist, wird sie ausschließlich zur Verpackung von Informationen verwendet, und die Information in den Projekten wird nicht verwendet.If the .nuspec file is specified, it's used exclusively for packaging information and any information in the projects is not used.

NuspecBasePathNuspecBasePath

Der Basispfad für die .nuspec-Datei.Base path for the .nuspec file.

NuspecPropertiesNuspecProperties

Durch Semikolons getrennte Liste der Schlüssel = Wertpaare.Semicolon separated list of key=value pairs.

AssemblyInfo-EigenschaftenAssemblyInfo properties

Assembly-Attribute, die normalerweise in einer AssemblyInfo-Datei vorlagen, werden jetzt automatisch aus Eigenschaften generiert.Assembly attributes that were typically present in an AssemblyInfo file are now automatically generated from properties.

Eigenschaften pro AttributProperties per attribute

Wie in der folgenden Tabelle gezeigt, besitzt jedes Attribut eine Eigenschaft, die seinen Inhalt steuert, und eine weitere zum Deaktivieren seiner Generierung:As shown in the following table, each attribute has a property that controls its content and another that disables its generation:

AttributAttribute EigenschaftProperty Eigenschaft zum DeaktivierenProperty 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

Notizen:Notes:

  • Das Standardverhalten von AssemblyVersion und FileVersion besteht in der Übernahme des Werts von $(Version) ohne Suffix.AssemblyVersion and FileVersion default is to take the value of $(Version) without suffix. Wenn $(Version) beispielsweise 1.2.3-beta.4 ist, wäre der Wert 1.2.3.For example, if $(Version) is 1.2.3-beta.4, then the value would be 1.2.3.
  • InformationalVersion hat standardmäßig den Wert von $(Version).InformationalVersion defaults to the value of $(Version).
  • An InformationalVersion ist $(SourceRevisionId) angefügt, wenn die Eigenschaft vorhanden ist.InformationalVersion has $(SourceRevisionId) appended if the property is present. Sie kann mithilfe von IncludeSourceRevisionInInformationalVersion deaktiviert werden.It can be disabled using IncludeSourceRevisionInInformationalVersion.
  • Die Eigenschaften Copyright und Description werden auch für NuGet-Metadaten verwendet.Copyright and Description properties are also used for NuGet metadata.
  • Configuration wird vom gesamten Buildprozess gemeinsam verwendet und über den --configuration-Parameter von dotnet-Befehlen festgelegt.Configuration is shared with all the build process and set via the --configuration parameter of dotnet commands.

GenerateAssemblyInfoGenerateAssemblyInfo

Ein boolescher Wert zum Aktivieren oder Deaktivieren der AssemblyInfo-Erstellung insgesamt.A Boolean that enable or disable all the AssemblyInfo generation. Der Standardwert ist true.The default value is true.

GeneratedAssemblyInfoFileGeneratedAssemblyInfoFile

Der Pfad der generierten Assembly-Infodatei.The path of the generated assembly info file. Standardmäßig eine Datei im $(IntermediateOutputPath) (obj)-Verzeichnis.Default to a file in the $(IntermediateOutputPath) (obj) directory.