web-dev-qa-db-ja.com

.NET Core 2.0へのアップグレード:PackageTargetFallbackとAssetTargetFallbackを一緒に使用することはできません

.NET Core 1.0または1.1で正常にコンパイルおよび実行されているプロジェクトをアップグレードする場合、ターゲットフレームワークを.NET Core 2.0(netcoreapp2.0)に更新すると、ビルドが次のエラーで失敗します。

 error NU1003: PackageTargetFallback and AssetTargetFallback cannot be used together. Remove PackageTargetFallback(deprecated) references from the project environment.

このエラーの理由は何ですか?また、プロジェクトを再度ビルドするためにどのように解決できますか?

57
Martin Ullrich

.NET Core 1.0および1.1では、.NET Coreで動作することがわかっているが公式にはサポートしていないパッケージを参照する場合、PackageTargetFallbackを設定する必要がありました。 PCLライブラリまたはレガシーdotnetフレームワークモニカー用に構築されたライブラリ。

このため、プロジェクト(.csproj.fsproj、...)には次のような行が含まれます。

<PackageTargetFallback>$(PackageTargetFallback);portable-net45+win8+wp8+wpa81;</PackageTargetFallback>

ほとんどの場合、この行は簡単に削除できます .NET Core 2.0は既にAssetTargetFallbacknet461に定義しているため、プロジェクトをビルドする必要があります-つまり、互換性のあるNuGetパッケージ.NET Framework 4.6.1以降では、追加の構成なしで使用できます。

これによりさらにビルド/復元エラーが発生する場合は、行を次のように変更します。

<AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback>

変更の理由は、PackageTargetFallbackは非推奨と見なされ、わずかに異なる動作をするAssetTargetFallbackに置き換える必要があるためです。

ツールの重大な変更点は、netcoreapp2.0およびnetstandard2.0が自動的にAssetTargetFallbackを設定することです。これは、プロジェクトファイルで定義されたPackageTargetFallback値と競合します。

104
Martin Ullrich