コードを .NET Core に移植するために依存関係を分析するAnalyze your dependencies to port code to .NET Core

.NET Core または .NET Standard にコードを移植するには、依存関係を理解する必要があります。To port your code to .NET Core or .NET Standard, you must understand your dependencies. 外部の依存関係は、プロジェクトで参照する NuGet パッケージまたは .dll ですが、これはユーザーが構築するものではありません。External dependencies are the NuGet packages or .dlls you reference in your project, but that you don't build yourself.

NuGet パッケージを PackageReference に移行するMigrate your NuGet packages to PackageReference

.NET Core は PackageReference を使用してパッケージの依存関係を指定します。.NET Core uses PackageReference to specify package dependencies. packages.config を使用してプロジェクトにパッケージを指定している場合は、.NET Core ではサポートされていないため、packages.configPackageReference 形式に変換する必要があります。If you're using packages.config to specify your packages in your project, you need to convert it to the PackageReference format because packages.config isn't supported in .NET Core.

移行方法については、「packages.config から PackageReference への移行」を参照してください。To learn how to migrate, see the Migrate from packages.config to PackageReference article.

NuGet パッケージをアップグレードするUpgrade your NuGet packages

プロジェクトを PackageReference 形式に移行した後、パッケージが .NET Core と互換性があるかどうかを確認する必要があります。After your migrating your project to the PackageReference format, you need to verify if your packages are compatible with .NET Core.

まず、パッケージを使用可能な最新バージョンにアップグレードします。First, upgrade your packages to the latest version that you can. これは、Visual Studio の NuGet パッケージマネージャーの UI で行うことができます。This can be done with the NuGet Package Manager UI in Visual Studio. パッケージの新しいバージョンの依存関係は、既に .NET Core と互換性がある可能性があります。It's likely that newer versions of your package dependencies are already compatible with .NET Core.

パッケージの依存関係を分析するAnalyze your package dependencies

変換およびアップグレードしたパッケージの依存関係が .NET Core で動作することをまだ確認していない場合は、次のいくつかの方法で行うことができます。If you haven't already verified that your converted and upgraded package dependencies work on .NET Core, there are a few ways that you can achieve that:

nuget.org を使用して NuGet パッケージを分析するAnalyze NuGet packages using nuget.org

nuget.org のパッケージのページの [Dependencies](依存関係) のセクションで、各パッケージでサポートされる TFM (ターゲット フレームワーク モニカー) を確認できます。You can see the Target Framework Monikers (TFMs) that each package supports on nuget.org under the Dependencies section of the package page.

互換性はこのサイトを使用して確認するのが簡単ですが、依存関係の情報はすべてのパッケージのサイトにはありません。Although using the site is an easier method to verify the compatibility, Dependencies information isn't available on the site for all packages.

NuGet パッケージ エクスプローラーを使用して NuGet パッケージを分析するAnalyze NuGet packages using NuGet Package Explorer

NuGet パッケージ自体はフォルダーのセットであり、プラットフォーム固有のアセンブリが含まれます。A NuGet package is itself a set of folders that contain platform-specific assemblies. したがって、パッケージ内に互換性のあるアセンブリを含むフォルダーがあるかどうかを確認する必要があります。So you need to check if there's a folder that contains a compatible assembly inside the package.

NuGet パッケージ フォルダーを調べる最も簡単な方法は、NuGet パッケージ エクスプローラー ツールを使用することです。The easiest way to inspect NuGet Package folders is to use the NuGet Package Explorer tool. これをインストールした後、次の手順を使用してフォルダー名を確認します。After installing it, use the following steps to see the folder names:

  1. NuGet パッケージ エクスプローラーを開きます。Open the NuGet Package Explorer.
  2. [Open package from online feed](オンライン フィードからパッケージを開く) をクリックします。Click Open package from online feed.
  3. パッケージの名前を検索します。Search for the name of the package.
  4. 検索結果からパッケージ名を選択し、 [開く] をクリックします。Select the package name from the search results and click open.
  5. 右側にある lib フォルダーを展開し、フォルダー名を確認します。Expand the lib folder on the right-hand side and look at folder names.

netstandardX.Y または netcoreappX.Y のパターンのいずれかを使用するフォルダー名を検索します。Look for a folder with names using one the following patterns: netstandardX.Y or netcoreappX.Y.

これらの値はターゲット フレームワーク モニカー (TFM) であり、.NET Standard、.NET Core、および .NET Core と互換性がある従来のポータブル クラス ライブラリ (PCL) プロファイルのバージョンにマップされます。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.

重要

パッケージでサポートされる TFM を見ると、netcoreapp* に互換性はあるものの、.NET Core プロジェクトのみを対象としており、.NET Standard プロジェクトを対象としていないことがわかります。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. 他の .NET Core アプリで使用できるのは、netstandard* ではなく、netcoreapp* のみをターゲットとするライブラリだけです。A library that only targets netcoreapp* and not netstandard* can only be consumed by other .NET Core apps.

.NET Framework 互換モード.NET Framework compatibility mode

NuGet パッケージの分析後、.NET Framework のみをターゲットとしていることがわかる場合があります。After analyzing the NuGet packages, you might find that they only target the .NET Framework.

.NET Standard 2.0 以降、.NET Framework 互換モードが導入されました。Starting with .NET Standard 2.0, the .NET Framework compatibility mode was introduced. この互換モードにより、.NET Standard および .NET Core プロジェクトは .NET Framework ライブラリを参照できます。This compatibility mode allows .NET Standard and .NET Core projects to reference .NET Framework libraries. .NET Framework ライブラリの参照はすべてのプロジェクトで機能するわけではありません (例えばライブラリで Windows Presentation Foundation (WPF) API を使用していても、多くの移植シナリオがブロック解除される場合など)。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.

Huitian.PowerCollections など、プロジェクトで .NET Framework をターゲットとする NuGet パッケージを参照すると、次の例のようなパッケージ フォールバック警告 (NU1701) が表示されます。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.

この警告は、パッケージを追加したとき、およびプロジェクトでそのパッケージを確実にテストするためにビルドするたびに表示されます。That warning is displayed when you add the package and every time you build to make sure you test that package with your project. プロジェクトが予期したとおりに動作している場合は、Visual Studio でパッケージ プロパティを編集するか、任意のコード エディターでプロジェクト ファイルを手動で編集して、この警告を非表示にすることができます。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.

プロジェクト ファイルを編集して警告を非表示にするには、警告を非表示にするパッケージの PackageReference エントリを見つけて、NoWarn 属性を追加します。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. NoWarn 属性では、すべての警告 ID のコンマ区切りリストを受け入れます。The NoWarn attribute accepts a comma-separated list of all the warning IDs. 次の例は、プロジェクト ファイルを手動で編集して、Huitian.PowerCollections パッケージの NU1701 警告を非表示にする方法を示しています。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>

Visual Studio でコンパイラ警告を非表示にする方法の詳細については、「NuGet パッケージの警告を非表示にする」を参照してください。For more information on how to suppress compiler warnings in Visual Studio, see Suppressing warnings for NuGet packages.

NuGet パッケージの依存関係が .NET Core で動作しない場合の対処方法What to do when your NuGet package dependency doesn't run on .NET Core

依存している NuGet パッケージが .NET Core で動作しない場合の対処方法はいくつかあります。There are a few things you can do if a NuGet package you depend on doesn't run on .NET Core:

  1. プロジェクトがオープン ソースで、GitHub のような場所にホストされている場合、直接開発者に連絡することができます。If the project is open source and hosted somewhere like GitHub, you can engage the developers directly.
  2. nuget.org で直接作成者に連絡することができます。パッケージを検索し、パッケージのページの左側にある [Contact Owners](所有者に問い合わせる) をクリックします。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. 使用していたパッケージと同じタスクを実行する、.NET Core で実行される別のパッケージを検索することができます。You can search for another package that runs on .NET Core that accomplishes the same task as the package you were using.
  4. パッケージが行っていたコードを自分で記述できます。You can attempt to write the code the package was doing yourself.
  5. 少なくともパッケージの互換バージョンが利用可能になるまでは、アプリの機能を変更することで、パッケージの依存関係を削除することができます。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.

オープン ソース プロジェクトの保守管理者および NuGet パッケージの発行者の多くは、ボランティアであることを忘れないでください。Remember that open-source project maintainers and NuGet package publishers are often volunteers. 彼らは、その分野に関心があるために無償で作業を行っており、多くの場合、日中に別の仕事を抱えています。They contribute because they care about a given domain, do it for free, and often have a different daytime job. したがって、.NET Core のサポートを求めるために連絡する際には、この点を考慮してください。So be mindful of that when contacting them to ask for .NET Core support.

上記のいずれでも問題を解決できない場合、後日 .NET Core に移植しなければならない場合があります。If you can't resolve your issue with any of the above, you may have to port to .NET Core at a later date.

.NET チームは .NET Core のサポートでどのライブラリが最も重要かを知りたいと考えています。The .NET Team would like to know which libraries are the most important to support with .NET Core. 使用したいライブラリについて、dotnet@microsoft.com にメールを送ることができます。You can send an email to dotnet@microsoft.com about the libraries you'd like to use.

NuGet パッケージではない依存関係を分析するAnalyze dependencies that aren't NuGet packages

ファイル システム内の DLL など、NuGet パッケージではない依存関係がある場合もあります。You may have a dependency that isn't a NuGet package, such as a DLL in the file system. その依存関係の移植性を調べる唯一の方法が、.NET Portability Analyzer ツールを実行することです。The only way to determine the portability of that dependency is to run the .NET Portability Analyzer tool. このツールでは、.NET Framework をターゲットとするアセンブリを分析し、.NET Core などの他の .NET プラットフォームに移植できない API を特定できます。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. このツールはコンソール アプリケーションまたは Visual Studio 拡張機能として実行できます。You can run the tool as a console application or as a Visual Studio extension.