web-dev-qa-db-ja.com

ドットネットリストア警告NU1701

C#で.NETCoreを使用していますが、dotnet restoreを実行すると、次のエラーが発生しました。

PS C:\ workspace\Arbitrator>ドットネット復元

C:\ workspace\Arbitrator\Arbitrator.csproj:警告NU1701:パッケージ 'PusherClient 0.5.0'は、プロジェクトターゲットフレームワーク '.NETCoreApp、Version = v2.0'の代わりに '.NETFramework、Version = v4.6.1'を使用して復元されました。これにより、互換性の問題が発生する場合があります。 C:\ workspace\Arbitrator\Arbitrator.csproj:警告NU1701:パッケージ 'WebSocket4Net 0.14.1'は、プロジェクトターゲットフレームワーク '.NETCoreApp、Version = v2.0'の代わりに '.NETFramework、Version = v4.6.1'を使用して復元されました。これにより、互換性の問題が発生する場合があります。

問題のこのパッケージは PusherClient です。ナゲットドキュメントに従ってインポートしたのですが、この警告を修正するにはどうすればよいですか?

48
fluter

PusherClientが.NET Core用にアップグレードされるまで待つ必要はありません。

.NET Coreから.NET Framework 4.6.1(およびそれ以降)を参照することは、 新機能 .NET Core/Standard 2.0プレビュー2/VS 2017プレビュー15.3以降およびMSによれば利用可能です。NET Frameworkコードを.NET Standardまたは.NET Coreに長期にわたって移行するのに役立つ機能と考えることができます

  1. この警告を抑制することができます

    • 特定のパッケージ用
    <PackageReference Include="Contoso.Base.API" Version="1.0.3">
        <NoWarn>NU1701</NoWarn>
    </PackageReference>
    
    • すべてのパッケージ用
    <NoWarn>NU1701</NoWarn>
    

    GUIから行う方法については、NuGet wikiのシナリオ2および3を参照

    ただし、.NET CoreでサポートされていないAPI(WPFからのようなもの)を呼び出すと、実行時にアプリケーションが失敗する可能性があります。失敗の別の理由は、おそらくPusherClientによって使用されるネイティブAPIである可能性があります。したがって、広範囲にテストする必要があります。しかし、ほとんどの場合、.NET Coreがサポートされているすべてのプラットフォームで動作します(たとえば、MathNet.Numerics依存関係を持つアプリケーションをテストしました。 MathNet.Numericsは.NET Framework 4.6.1でもLinuxで動作しました。

  2. アプリをクロスプラットフォームにする必要がない場合は、csprojファイルに次を追加して、ターゲットフレームワークを.NET 4.6.1に変更します。

    <TargetFramework>net461</TargetFramework>
    
55
Sourcerer

補足として、これをしないでください:

<PropertyGroup>
  <NoWarn>NU1701</NoWarn>
<PropertyGroup>

これを行うと、directory.build.propファイルなど、他の場所で取得される他のNoWarn設定が破損します。代わりにこれを行います:

<PropertyGroup>
  <NoWarn>$(NoWarn);NU1701</NoWarn>
<PropertyGroup>

これにより、すべてのグローバル設定が保持されます。

9
Chris M.

.NET Core 1.xの場合:

PusherClientのメンバーにプロジェクト.NET-Coreを準備するように指示する必要があります。

8
D.R.