このページでは、次の破壊的変更について説明します。
重大な変更 | 導入されたバージョン |
---|---|
デザイン時ビルドでは、最上位レベルのパッケージ参照のみが返されます | 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 より前では、プロジェクト ファイルの LogicalName
項目に ManifestResourceName
、DependentUpon
、または EmbeddedResource
メタデータが指定されなかった場合、MSBuild ではパターン <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources
でマニフェスト ファイル名が生成されていました。
RootNamespace
がプロジェクト ファイルで定義されていない場合は、既定でそのプロジェクトの名前になります。 たとえば、ルート プロジェクト ディレクトリ内の Form1 という名前のリソース ファイルに対して生成されたマニフェスト名は、MyProject.Form1.resources でした。
.NET Core 3.0 以降では、あるリソース ファイルが同じ名前のソース ファイルと併置されている場合 (たとえば、Form1.resx と Form1.cs)、MSBuild ではそのソース ファイルの型情報が使用されてパターン <Namespace>.<ClassName>.resources
でマニフェスト ファイル名が生成されます。 名前空間とクラス名は、併置されたソース ファイルの最初の型から抽出されます。 たとえば、Form1.cs という名前のソース ファイルと併置されている Form1 という名前のリソース ファイルに対して生成されたマニフェスト名は、MyNamespace.Form1.resources になります。 重要な注意点として、.NET Core の以前のバージョンとはファイル名の最初の部分が異なります (MyProject ではなく MyNamespace)。
注
プロジェクト ファイルの LogicalName
項目で ManifestResourceName
、DependentUpon
、または EmbeddedResource
メタデータが指定されている場合、この変更はそのリソース ファイルには影響しません。
この破壊的変更は、.NET Core プロジェクトへの EmbeddedResourceUseDependentUponConvention
プロパティの追加によって導入されました。 既定では、リソース ファイルは .NET Core プロジェクト ファイルに明示的にリストされていないため、生成された DependentUpon
ファイルに名前を付ける方法を指定するための メタデータはありません。
EmbeddedResourceUseDependentUponConvention
が true
に設定されている場合 (既定)、MSBuild では併置されたソース ファイルが検索され、そのファイルから名前空間とクラス名が抽出されます。
EmbeddedResourceUseDependentUponConvention
を false
に設定すると、MSBuild では RootNamespace
と相対ファイル パスを組み合わせた前の動作に従ってマニフェスト名が生成されます。
推奨されるアクション
ほとんどの場合、開発者側でアクションを取る必要はなく、アプリは引き続き動作するはずです。 ただし、この変更によってアプリに影響が出ている場合は、次のいずれかを実行してください。
新しいマニフェスト名を要求するようにコードを変更する。
プロジェクト ファイルで
EmbeddedResourceUseDependentUponConvention
をfalse
に設定して、新しい名前付け規則を無効にする。<PropertyGroup> <EmbeddedResourceUseDependentUponConvention>false</EmbeddedResourceUseDependentUponConvention> </PropertyGroup>
カテゴリ
MSBuild
影響を受ける API
なし
.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
なし
.NET