Analysieren Ihrer DrittanbieterabhängigkeitenAnalyze your third-party dependencies

Wenn Sie Ihren Code auf .NET Core oder .NET Standard portieren möchten, ist der erste Schritt zum Portieren das Verstehen Ihrer Drittanbieterabhängigkeiten.If you're looking to port your code to .NET Core or .NET Standard, the first step in the porting process is to understand your third-party dependencies. Drittanbieterabhängigkeiten sind entweder NuGet-Pakete oder DLLs, auf die Sie in Ihrem Projekt verweisen.Third-party dependencies are either NuGet packages or DLLs you're referencing in your project. Bewerten Sie jede Abhängigkeit, und entwickeln Sie einen Alternativplan für Abhängigkeiten, die nicht mit .NET Core kompatibel sind.Evaluate each dependency and develop a contingency plan for the dependencies that aren't compatible with .NET Core. In diesem Artikel wird gezeigt, wie Sie bestimmen, ob die Abhängigkeit mit .NET Core kompatibel ist.This article shows you how to determine if the dependency is compatible with .NET Core.

Analysieren von NuGet-Paketen, auf die in Ihrem Projekt verwiesen wirdAnalyze referenced NuGet packages in your project

Wenn Sie in Ihrem Projekt auf NuGet-Pakete verweisen, müssen Sie überprüfen, ob diese mit .NET Core kompatibel sind.If you're referencing NuGet packages in your project, you need to verify if they're compatible with .NET Core. Es gibt zwei Möglichkeiten, dies zu erreichen:There are two ways to accomplish that:

Wenn sich bei der Analyse herausstellt, dass die Pakete nicht mit .NET Core sondern nur mit .NET Framework kompatibel sind, können Sie prüfen, ob der .NET Framework-Kompatibilitätsmodus Ihnen beim Portieren helfen kann.After analyzing the packages, if they're not compatible with .NET Core and only target .NET Framework, you can check if the .NET Framework compatibility mode can help with your porting process.

Analysieren von NuGet-Paketen mit dem NuGet-Paket-ExplorerAnalyze NuGet packages using NuGet Package Explorer

Ein NuGet-Paket besteht wiederum aus mehreren Ordnern, die plattformspezifische Assemblys enthalten.A NuGet package is itself a set of folders that contain platform-specific assemblies. Also müssen Sie prüfen, ob es im Paket einen Ordner gibt, der eine kompatible Assembly enthält.So you need to check if there's a folder that contains a compatible assembly inside the package.

Am einfachsten überprüfen Sie die NuGet-Paket-Ordner mit dem Tool NuGet-Paket-Explorer.The easiest way to inspect NuGet Package folders is to use the NuGet Package Explorer tool. Führen Sie nach der Installation folgende Schritte durch, um die Ordnernamen anzuzeigen:After installing it, use the following steps to see the folder names:

  1. Öffnen Sie den NuGet-Paket-Explorer.Open the NuGet Package Explorer.
  2. Klicken Sie auf Open package from online feed (Paket über Onlinefeed öffnen).Click Open package from online feed.
  3. Suchen Sie nach dem Namen des Pakets.Search for the name of the package.
  4. Wählen Sie den Paketnamen aus den Suchergebnissen aus, und klicken Sie auf Öffnen.Select the package name from the search results and click open.
  5. Erweitern Sie den Ordner Lib (Bibliotheken) auf der rechten Seite, und suchen Sie in den Ordnernamen.Expand the lib folder on the right-hand side and look at folder names.

Suchen Sie nach einem Ordner mit einem der folgenden Namen:Look for a folder with any of the following names:

netstandard1.0
netstandard1.1
netstandard1.2
netstandard1.3
netstandard1.4
netstandard1.5
netstandard1.6
netstandard2.0
netcoreapp1.0
netcoreapp1.1
netcoreapp2.0
portable-net45-win8
portable-win8-wpa8
portable-net451-win81
portable-net45-win8-wpa8-wpa81

Bei diesen Werten handelt es sich um Target Framework Moniker (TFMs), die den Versionen des .NET-Standard und .NET Core-Profils und der herkömmlichen PCL-Profilen (Portable Class Library) zugeordnet sind, die mit .NET Core kompatibel sind.These values are the Target Framework Monikers (TFMs) that map to versions of the .NET Standard, .NET Core, and traditional Portable Class Library (PCL) profiles that are compatible with .NET Core.

Wichtig

Beachten Sie bei TFMs, die von einem Paket unterstützt werden, dass netcoreapp* trotz Kompatibilität, nur für .NET Core-Projekte konzipiert ist und nicht für .NET Standard-Projekte.When looking at the TFMs that a package supports, note that netcoreapp*, while compatible, is for .NET Core projects only and not for .NET Standard projects. Eine Bibliothek, die nur auf netcoreapp* und nicht auf netstandard* ausgerichtet ist, kann nur von anderen .NET Core-Apps verwendet werden.A library that only targets netcoreapp* and not netstandard* can only be consumed by other .NET Core apps.

Es gibt auch einige ältere TFMs, die in Vorabversionen von .NET Core verwendet wurden, die möglicherweise ebenfalls kompatibel sind:There are also some legacy TFMs used in pre-release versions of .NET Core that may also be compatible:

dnxcore50
dotnet5.0
dotnet5.1
dotnet5.2
dotnet5.3
dotnet5.4
dotnet5.5

Die Wahrscheinlichkeit ist hoch, dass diese TFMs mit Ihrem Code funktionieren, eine Garantie für die Kompatibilität besteht jedoch nicht.While these TFMs likely work with your code, there is no guarantee of compatibility. Pakete mit diesen TFMs wurden mit der Vorabversion von .NET Core-Paketen erstellt.Packages with these TFMs were built with pre-release .NET Core packages. Achten Sie darauf, wann (und ob) Pakete, die diese TFMs verwenden, auf .NET Standard aktualisiert werden.Take note of when (or if) packages using these TFMs are updated to be .NET Standard-based.

Hinweis

Wenn Sie ein Paket, das auf eine herkömmliche PCL oder Vorabversion von .NET Core ausrichtet ist, verwenden möchten, müssen Sie das PackageTargetFallback-MSBuild-Element in Ihrer Projektdatei verwenden.To use a package targeting a traditional PCL or pre-release .NET Core target, you must use the PackageTargetFallback MSBuild element in your project file. Weitere Informationen zu diesem MSBuild-Element finden Sie unter PackageTargetFallback.For more information about this MSBuild element, see PackageTargetFallback.

Analysieren von NuGet-Paketen mit nuget.orgAnalyze NuGet packages using nuget.org

Alternativ können Sie unter nuget.org im Abschnitt Dependencies (Abhängigkeiten) der Seite für jedes Paket auch sehen, welche TFMs von einem Paket unterstützt werden.Alternatively, you can see the TFMs that each package supports on nuget.org under the Dependencies section of the package page.

Es ist leichter, die Website zum Überprüfen der Kompatibilität zu verwenden. Allerdings stehen dort nicht für alle Abhängigkeiten Informationen zur Verfügung.Although using the site is an easier method to verify the compatibility, Dependencies information is not available on the site for all packages.

Der .NET Framework-Kompatibilitätsmodus.NET Framework compatibility mode

Nachdem Sie die NuGet-Pakete analysiert haben, zeigt sich möglicherweise, dass sie nur auf .NET Framework ausgerichtet sind, wie dies bei den meisten NuGet-Paketen der Fall ist.After analyzing the NuGet packages, you might find that they only target the .NET Framework, as most NuGet packages do.

Mit .NET Standard 2.0 wurde der .NET Framework-Kompatibilitätsmodus eingeführt.Starting with .NET Standard 2.0, the .NET Framework compatibility mode was introduced. Mit diesem Kompatibilitätsmodus können .NET Standard- und .NET Core-Projekte auf .NET Framework-Bibliotheken verweisen.This compatibility mode allows .NET Standard and .NET Core projects to reference .NET Framework libraries. Das Verweisen auf .NET Framework-Bibliotheken funktioniert nicht bei allen Projekten. So funktioniert es z.B. nicht, wenn die Bibliothek Windows Presentation Foundation-APIs (WPF) verwendet. Dadurch werden jedoch viele Portierungsszenarios ermöglicht.Referencing .NET Framework libraries doesn't work for all projects, such as if the library uses Windows Presentation Foundation (WPF) APIs, but it does unblock many porting scenarios.

Wenn Sie in Ihrem Projekt auf NuGet-Pakete verweisen, die auf .NET Framework ausgerichtet sind, wie z.B. Huitian.PowerCollections, wird eine Paketfallbackwarnung (NU1701) wie die folgende ausgegeben:When you reference NuGet packages that target the .NET Framework in your project, such as Huitian.PowerCollections, you get a package fallback warning (NU1701) similar to the following example:

NU1701: Package ‘Huitian.PowerCollections 1.0.0’ was restored using ‘.NETFramework,Version=v4.6.1’ instead of the project target framework ‘.NETStandard,Version=v2.0’. This package may not be fully compatible with your project.

Diese Warnung wird angezeigt, wenn Sie das Paket hinzufügen und jedes Mal, wenn Sie etwas erstellen, um sicherzustellen, dass Sie das Paket mit Ihrem Projekt testen.That warning is displayed when you add the package and every time you build to make sure you test that package with your project. Wenn Ihr Projekt wie gewünscht funktioniert, können Sie die Warnung unterdrücken, indem Sie die Paketeigenschaften in Visual Studio bearbeiten oder die Projektdatei in Ihrem bevorzugten Code-Editor manuell bearbeiten.If your project is working as expected, you can suppress that warning by editing the package properties in Visual Studio or by manually editing the project file in your favorite code editor.

Um die Warnung durch Bearbeiten der Projektdatei zu unterdrücken, suchen Sie den PackageReference-Eintrag für das Paket, für das Sie die Warnung unterdrücken möchten, und fügen Sie das NoWarn-Attribut hinzu.To suppress the warning by editing the project file, find the PackageReference entry for the package you want to suppress the warning for and add the NoWarn attribute. Das NoWarn-Attribut akzeptiert eine durch Trennzeichen getrennte Liste aller Warnungs-IDs.The NoWarn attribute accepts a comma-separated list of all the warning IDs. Im folgenden Beispiel wird gezeigt, wie Sie die NU1701-Warnung für das Huitian.PowerCollections-Paket unterdrücken, indem Sie Ihre Projektdatei manuell bearbeiten:The following example shows how to suppress the NU1701 warning for the Huitian.PowerCollections package by editing your project file manually:

<ItemGroup>
  <PackageReference Include="Huitian.PowerCollections" Version="1.0.0" NoWarn="NU1701" />
</ItemGroup>

Weitere Informationen zum Unterdrücken von Compilerwarnungen in Visual Studio finden Sie unter Unterdrücken von Compilerwarnungen im Abschnitt zum Unterdrücken von Warnungen für NuGet-Pakete.For more information on how to suppress compiler warnings in Visual Studio, see Suppressing warnings for NuGet packages.

Vorgehensweise, wenn die NuGet-Paket-Abhängigkeit unter .NET Core nicht ausgeführt wirdWhat to do when your NuGet package dependency doesn't run on .NET Core

Es gibt einige Dinge, die Sie tun können, wenn ein NuGet-Paket, auf das Sie angewiesen sind, unter .NET Core nicht ausgeführt wird:There are a few things you can do if a NuGet package you depend on doesn't run on .NET Core:

  1. Wenn es sich um ein Open Source-Projekt handelt, das beispielsweise von GitHub gehostet wird, können Sie sich direkt an die Entwickler wenden.If the project is open source and hosted somewhere like GitHub, you can engage the developers directly.
  2. Sie können den Autor direkt über nuget.org kontaktieren. Suchen Sie nach dem Paket, und klicken Sie links auf der Paketseite auf Contact Owners (Besitzer kontaktieren).You can contact the author directly on nuget.org. Search for the package and click Contact Owners on the left-hand side of the package's page.
  3. Sie können nach einem anderen Paket suchen, das unter .NET Core ausgeführt wird und denselben Zweck erfüllt wie das Paket, das Sie bisher verwendet haben.You can search for another package that runs on .NET Core that accomplishes the same task as the package you were using.
  4. Sie können den vom Paket ausgeführten Code selbst schreiben.You can attempt to write the code the package was doing yourself.
  5. Sie können die Abhängigkeit für das Paket eliminieren, indem Sie die Funktionalität Ihrer Anwendung ändern, zumindest bis eine kompatible Version des Pakets verfügbar ist.You could eliminate the dependency on the package by changing the functionality of your app, at least until a compatible version of the package becomes available.

Denken Sie daran, dass Open-Source-Projektverwalter und NuGet-Paketherausgeber häufig Freiwillige sind.Remember that open-source project maintainers and NuGet package publishers are often volunteers. Sie beteiligen sich, weil Ihnen eine bestimmte Domäne wichtig ist. Sie arbeiten daran unentgeltlich und haben häufig einen anderen Job, für den sie unter der Woche arbeiten.They contribute because they care about a given domain, do it for free, and often have a different daytime job. Denken Sie daran, wenn Sie sie kontaktieren, um sie nach Hilfe mit .NET Core zu fragen.So be mindful of that when contacting them to ask for .NET Core support.

Wenn es Ihnen mit den genannten Vorschlägen nicht gelingt, Ihr Problem zu beheben, müssen Sie sich mit dem Portieren auf .NET Core noch etwas gedulden.If you can't resolve your issue with any of the above, you may have to port to .NET Core at a later date.

Das .NET-Team würde gerne wissen, welche Bibliotheken von .NET Core unterstützt werden sollten.The .NET Team would like to know which libraries are the most important to support with .NET Core. Sie können uns gerne mit einer E-Mail an dotnet@microsoft.com mitteilen, welche Bibliotheken Sie gerne verwenden würden.You can send an email to dotnet@microsoft.com about the libraries you'd like to use.

Analysieren von Abhängigkeiten, bei denen es sich nicht um NuGet-Pakete handeltAnalyze dependencies that aren't NuGet packages

Möglicherweise verfügen Sie über eine Abhängigkeit, bei der es sich nicht um ein NuGet-Paket, sondern beispielsweise um eine DLL im Dateisystem handelt.You may have a dependency that isn't a NuGet package, such as a DLL in the file system. Wenn Sie feststellen möchten, ob diese Abhängigkeit portiert werden kann, haben Sie nur die Möglichkeit, das Tool .NET Portability Analyzer auszuführen.The only way to determine the portability of that dependency is to run the .NET Portability Analyzer tool. Das Tool kann Assemblys analysieren, die auf .NET Framework ausgerichtet sind, und APIs identifizieren, die nicht auf andere .NET-Plattformen wie .NET Core portiert werden können.The tool can analyze assemblies that target the .NET Framework and identify APIs that aren't portable to other .NET platforms such as .NET Core. Sie können das Tool als Konsolenanwendung oder als Visual Studio-Erweiterung ausführen.You can run the tool as a console application or as a Visual Studio extension.

Nächste SchritteNext steps

Wenn Sie eine Bibliothek portieren, lesen Sie Portieren von Bibliotheken.If you're porting a library, check out Porting your Libraries.