.NET Framework と .NET Core の両方をサポートするようにプロジェクトを整理するOrganize your project to support both .NET Framework and .NET Core

.NET Framework と .NET Core 両方のコンパイルに同時に対応するソリューションを作成する方法について説明します。Learn how to create a solution that compiles for both .NET Framework and .NET Core side-by-side. この目標を達成できるようにプロジェクトを整理するいくつかのオプションを参照してください。See several options to organize projects to help you achieve this goal. ここでは、.NET Core でプロジェクト レイアウトを設定する方法について決定するときに考慮する典型的なシナリオを紹介します。Here are some typical scenarios to consider when you're deciding how to setup your project layout with .NET Core. この一覧はプロジェクトのニーズに基づいて選択されており、すべてを網羅しるわけではりません。The list may not cover everything you want; prioritize based on your project's needs.

  • 既存のプロジェクトと .NET Core プロジェクトを結合し、シングル プロジェクトを作成するCombine existing projects and .NET Core projects into single projects

    効果:What this is good for:

    • 複数のプロジェクトをコンパイルするのではなく、シングル プロジェクトをコンパイルすることでビルド プロセスをシンプルにします。それぞれ、異なる .NET Framework バージョンまたはプラットフォームをターゲットにします。Simplifying your build process by compiling a single project rather than compiling multiple projects, each targeting a different .NET Framework version or platform.
    • ターゲットが複数のプロジェクトのソース ファイル管理をシンプルにします。シングル プロジェクト ファイルを管理することになります。Simplifying source file management for multi-targeted projects because you must manage a single project file. ソース ファイルの追加/削除時、代替方法では、これらを他のプロジェクトと手動で同期する必要があります。When adding/removing source files, the alternatives require you to manually sync these with your other projects.
    • 使用する NuGet パッケージを簡単に生成します。Easily generating a NuGet package for consumption.
    • コンパイラ ディレクティブを利用することで、ライブラリの特定の .NET Framework バージョンに対してコードを記述できます。Allows you to write code for a specific .NET Framework version in your libraries through the use of compiler directives.

    サポートされていないシナリオ:Unsupported scenarios:

  • 既存のプロジェクトと新しい .NET Core プロジェクトを別々に保存するKeep existing projects and new .NET Core projects separate

    効果:What this is good for:

    • 既存のプロジェクトで引き続き開発をサポートします。Visual Studio 2017 を所有していない開発者/貢献者はアップグレードする必要がありません。Continuing to support development on existing projects without having to upgrade for developers/contributors who may not have Visual Studio 2017.
    • 既存のプロジェクトで新しいバグが発生する可能性が減ります。既存のプロジェクトではコード チャーンが要求されないためです。Decreasing the possibility of creating new bugs in existing projects because no code churn is required in those projects.


次のリポジトリを考慮してください。Consider the repository below:


ソース コードSource Code

下に説明する既存のプロジェクトの制約や複雑性にもよりますが、このリポジトリのために .NET Core のサポートを追加する方法がいくつかあります。The following describes several ways to add support for .NET Core for this repository depending on the constraints and complexity of the existing projects.

既存のプロジェクトとターゲットが複数ある .NET Core Project を置換しますReplace existing projects with a multi-targeted .NET Core project

リポジトリを再整理できます。既存の *.csproj ファイルが削除され、複数のフレームワークをターゲットにするシングル *.csproj ファイルが作成されます。Reorganize the repository so that any existing *.csproj files are removed and a single *.csproj file is created that targets multiple frameworks. 異なるフレームワークに対してシングル プロジェクトでコンパイルできるので、この方法が推奨されます。This is a great option because a single project is able to compile for different frameworks. さまざまなコンパイル オプション、ターゲットにするフレームワークごとの依存関係などを処理することもできます。It also has the power to handle different compilation options and dependencies per targeted framework.

複数のフレームワークをターゲットにする csproj の作成

ソース コードSource Code

注目するべき変更点:Changes to note are:

  • packages.config*.csproj が新しい .NET Core *.csproj に置き換わりました。Replacement of packages.config and *.csproj with a new .NET Core *.csproj. NuGet パッケージが <PackageReference> ItemGroup で指定されています。NuGet packages are specified with <PackageReference> ItemGroup.

既存のプロジェクトを保持し、.NET Core プロジェクトを作成するKeep existing projects and create a .NET Core project

古いフレームワークをターゲットにする既存のプロジェクトがあるとき、そのようなプロジェクトをそのまま残し、.NET Core プロジェクトを利用して今後のフレームワークをターゲットにすると効率的な場合があります。If there are existing projects that target older frameworks, you may want to leave these projects untouched and use a .NET Core project to target future frameworks.

別のフォルダーに既存のプロジェクトがある .NET Core プロジェクト

ソース コードSource Code

注目するべき変更点:Changes to note are:

  • .NET Core と既存のプロジェクトを別々のフォルダーに保存します。The .NET Core and existing projects are kept in separate folders.
    • プロジェクトを別々のフォルダーに保存すれば、Visual Studio 2017 を所有する必要がありません。Keeping projects in separate folders avoids forcing you to have Visual Studio 2017. 古いプロジェクトだけを開く別個のソリューションを作成できます。You can create a separate solution that only opens the old projects.

関連項目See also

.NET Core に移行する方法の詳細なガイダンスについては、.NET Core の移植に関するドキュメントのページを参照してください。Please see the .NET Core porting documentation for more guidance on migrating to .NET Core.