次の方法で共有


.NET Core 2.1 から 3.1 の MSBuild に関する破壊的変更

このページでは、次の破壊的変更について説明します。

互換性に影響する変更点 導入されたバージョン
デザイン時のビルドから最上位のパッケージ参照のみが返される 3.1
リソース マニフェストのファイル名の変更 3.0
プロジェクト ツールが SDK に追加されました 2.1

.NET Core 3.1

デザイン時のビルドから最上位のパッケージ参照のみが返される

.NET Core SDK 3.1.400 以降では、RunResolvePackageDependencies ターゲットから最上位のパッケージ参照のみが返されます。

導入されたバージョン

.NET Core SDK 3.1.400

変更の説明

以前のバージョンの .NET Core SDK では、RunResolvePackageDependencies ターゲットにより、NuGet アセット ファイルの情報を含む次の MSBuild 項目が作成されていました。

  • PackageDefinitions
  • PackageDependencies
  • TargetDefinitions
  • FileDefinitions
  • FileDependencies

このデータは、ソリューション エクスプローラーで [依存関係] ノードに設定するために、Visual Studio によって使用されます。 ただし、大量のデータになる場合があります。[依存関係] ノードが展開されていない限り、このデータは必要ありません。

.NET Core SDK バージョン 3.1.400 以降、これらの項目のほとんどは既定で生成されません。 型 Package の項目のみが返されます。 [依存関係] ノード設定するために、Visual Studio に項目が必要な場合、アセット ファイルから情報が直接読み取られます。

変更理由

この変更は、Visual Studio 内のソリューション読み込みのパフォーマンスを向上させるために導入されました。 以前はすべてのパッケージ参照が読み込まれ、ほとんどのユーザーが表示することのない多数の参照が読み込まれていました。

これらの項目が作成されることに依存する MSBuild ロジックがある場合は、プロジェクト ファイルで EmitLegacyAssetsFileItems プロパティを true に設定します。 この設定にすることで、すべての項目が作成される以前の動作が有効になります。

カテゴリ

MSBuild

影響を受ける API

該当なし


.NET Core 3.0

リソース マニフェストのファイル名の変更

.NET Core 3.0 以降では、既定の場合、MSBuild によってリソース ファイルに対して異なるマニフェスト ファイル名が生成されます。

導入されたバージョン

3.0

変更の説明

.NET Core 3.0 より前では、プロジェクト ファイルの EmbeddedResource 項目に LogicalNameManifestResourceName、または DependentUpon メタデータが指定されなかった場合、MSBuild ではパターン <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources でマニフェスト ファイル名が生成されていました。 RootNamespace がプロジェクト ファイルで定義されていない場合は、既定でそのプロジェクトの名前になります。 たとえば、ルート プロジェクト ディレクトリ内の Form1 という名前のリソース ファイルに対して生成されたマニフェスト名は、MyProject.Form1.resources でした。

.NET Core 3.0 以降では、あるリソース ファイルが同じ名前のソース ファイルと併置されている場合 (たとえば、Form1.resxForm1.cs)、MSBuild ではそのソース ファイルの型情報が使用されてパターン <Namespace>.<ClassName>.resources でマニフェスト ファイル名が生成されます。 名前空間とクラス名は、併置されたソース ファイルの最初の型から抽出されます。 たとえば、Form1.cs という名前のソース ファイルと併置されている Form1 という名前のリソース ファイルに対して生成されたマニフェスト名は、MyNamespace.Form1.resources になります。 重要な注意点として、.NET Core の以前のバージョンとはファイル名の最初の部分が異なります (MyProject ではなく MyNamespace)。

注意

プロジェクト ファイルの EmbeddedResource 項目で LogicalNameManifestResourceName、または DependentUpon メタデータが指定されている場合、この変更はそのリソース ファイルには影響しません。

この破壊的変更は、.NET Core プロジェクトへの EmbeddedResourceUseDependentUponConvention プロパティの追加によって導入されました。 既定では、リソース ファイルは .NET Core プロジェクト ファイルに明示的にリストされていないため、生成された .resources ファイルに名前を付ける方法を指定するための DependentUpon メタデータはありません。 EmbeddedResourceUseDependentUponConventiontrue に設定されている場合 (既定)、MSBuild では併置されたソース ファイルが検索され、そのファイルから名前空間とクラス名が抽出されます。 EmbeddedResourceUseDependentUponConventionfalse に設定すると、MSBuild では RootNamespace と相対ファイル パスを組み合わせた前の動作に従ってマニフェスト名が生成されます。

ほとんどの場合、開発者側でアクションを取る必要はなく、アプリは引き続き動作するはずです。 ただし、この変更によってアプリに影響が出ている場合は、次のいずれかを実行してください。

  • 新しいマニフェスト名を要求するようにコードを変更する。

  • プロジェクト ファイルで EmbeddedResourceUseDependentUponConventionfalse に設定して、新しい名前付け規則を無効にする。

    <PropertyGroup>
      <EmbeddedResourceUseDependentUponConvention>false</EmbeddedResourceUseDependentUponConvention>
    </PropertyGroup>
    

カテゴリ

MSBuild

影響を受ける API

N/A


.NET Core 2.1

プロジェクト ツールが SDK に追加されました

.NET Core 2.1 SDK に一般的な CLI ツールが追加されました。これらのツールをプロジェクトから参照する必要がなくなりました。

変更内容

.NET Core 2.0 では、<DotNetCliToolReference> プロジェクト設定で外部 .NET ツールがプロジェクトによって参照されます。 .NET Core 2.1 では、これらのツールの一部が .NET Core SDK に付属します。この設定は不要になりました。 プロジェクトにこれらのツールへの参照を含めると、"ツール 'Microsoft.EntityFrameworkCore.Tools.DotNet' は .NET Core SDK に付属するようになりました" のようなエラーが届きます。

.NET Core 2.1 SDK に追加されたツール:

<DotNetCliToolReference> 値 ツール
Microsoft.DotNet.Watcher.Tools dotnet-watch
Microsoft.Extensions.SecretManager.Tools dotnet-user-secrets
Microsoft.Extensions.Caching.SqlConfig.Tools dotnet-sql-cache
Microsoft.EntityFrameworkCore.Tools.DotNet dotnet-ef

導入されたバージョン

.NET Core SDK 2.1.300

プロジェクトから <DotNetCliToolReference> 設定を削除します。

カテゴリ

MSBuild

影響を受ける API

該当なし