コードを .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. 各依存関係を評価し、.NET Core と互換性のない依存関係に対して代替計画を作成します。Evaluate each dependency and develop a contingency plan for the ones that aren't compatible with .NET Core. ここでは、依存関係が .NET Core と互換性があるかどうかを判断する方法について説明します。Here's how to determine if a dependency is compatible with .NET Core.

プロジェクトで参照される NuGet パッケージを分析するAnalyze referenced NuGet packages in your projects

プロジェクトで NuGet パッケージを参照する場合は、.NET Core と互換性があるかどうかを確認する必要があります。If you reference NuGet packages in your project, you need to verify if they're compatible with .NET Core. これを行う場合、次の 2 つの方法があります。There are two ways to accomplish that:

パッケージの分析後、NET Core と互換性がなく、.NET Framework のみをターゲットとする場合は、.NET Framework 互換モードが移植プロセスに役立つかどうかを確認できます。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.

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.

次のいずれかの名前のフォルダーを探します。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
netcoreapp2.1
netcoreapp2.2
portable-net45-win8
portable-win8-wpa8
portable-net451-win81
portable-net45-win8-wpa8-wpa81

これらの値はターゲット フレームワーク モニカー (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.

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

nuget.org のパッケージ ページの [Dependencies](依存関係) セクションで、各パッケージでサポートされる TFM を確認することもできます。Alternatively, you can see the 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 is not available on the site for all packages.

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

NuGet パッケージの分析後、ほとんどの NuGet パッケージと同様に、.NET Framework のみがターゲットであることがわかる場合があります。After analyzing the NuGet packages, you might find that they only target the .NET Framework, as most NuGet packages do.

.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.

パッケージを PackageReference に移植するPort your packages to PackageReference

.NET Core は PackageReference を使用してパッケージの依存関係を指定します。.NET Core uses PackageReference to specify package dependencies. パッケージの指定に packages.config を使用している場合は、PackageReference に変換する必要があります。If you are using packages.config to specify your packages, you will need to convert over to PackageReference.

詳細については、「Migrate from packages.config to PackageReference」(packages.config から PackageReference への移行) を参照してください。You can learn more at Migrate from packages.config to PackageReference.

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.