C# dotnet还原警告NU1701

C# dotnet还原警告NU1701,c#,.net,nuget,.net-core,C#,.net,Nuget,.net Core,我将.NET Core与C#一起使用,当我执行dotnet还原时,它给出了以下错误: PS C:\workspace\仲裁者>点网还原 C:\workspace\仲裁者\仲裁者.csproj:警告NU1701:已使用“.NETFramework,Version=v4.6.1”而不是项目目标框架“.NETCoreApp,Version=v2.0”还原了包“PusherClient 0.5.0”。这可能会导致兼容性问题。 C:\workspace\仲裁者\仲裁者.csproj:警告NU1701:包“

我将.NET Core与C#一起使用,当我执行
dotnet还原时,它给出了以下错误:

PS C:\workspace\仲裁者>点网还原

C:\workspace\仲裁者\仲裁者.csproj:警告NU1701:已使用“.NETFramework,Version=v4.6.1”而不是项目目标框架“.NETCoreApp,Version=v2.0”还原了包“PusherClient 0.5.0”。这可能会导致兼容性问题。 C:\workspace\仲裁者\仲裁者.csproj:警告NU1701:包“WebSocket4Net 0.14.1”已使用“.NETFramework,版本=v4.6.1”而不是项目目标框架“.NETCoreApp,版本=v2.0”还原。这可能会导致兼容性问题

这个有问题的包裹是。我只是按照NuGet文档导入它。如何修复此警告?

对于.NET Core 1.x:


您需要告诉Pusher客户机的人员准备好他们的.NET Core项目。

您不必等到Pusher客户机升级为.NET Core

从.NET Core中引用.NET Framework 4.6.1(及以下版本)是自.NET Core/Standard 2.0 preview 2/VS 2017 preview 15.3以来的一个可用版本,据MS称,它可以被视为一种功能,可以帮助您随着时间的推移将.NET Framework代码迁移到.NET Standard或.NET Core

  • 您可以仅抑制此警告

    • 对于特定的包
    
    NU1701
    
    • 适用于所有包裹
    NU1701
    

    不过,您的应用程序可能会在运行时失败 当您调用不受支持的API(如WPF中的某些内容)时 由.NETCore编写。失败的另一个原因可能是本机API 可能由Pusher客户端使用。所以你应该对它进行广泛的测试。 但在大多数情况下,它只适用于所有以.NET为核心的平台 是受支持的(例如,我使用 Numerics的依赖关系,即使 Numerics也是.NETFramework(4.6.1)的一部分

  • 如果您不需要应用程序跨平台,只需将以下内容添加到csproj文件中,将其目标框架更改为.NET 4.6.1即可:

    net461
    

  • 请注意,不要这样做:

    
    NU1701
    
    这样做将破坏从其他地方(例如从directory.build.prop文件)获取的任何其他NoWarn设置。相反,请执行以下操作:

    
    美元(诺瓦恩);NU1701
    

    这样,任何全局设置都会被保留。

    正如Yair指出的,GitHub上围绕这个主题存在一个公开问题:

    如果使用回退框架版本解决的依赖关系是可传递的,则禁止对引用的包发出警告将不起作用

    例如,Microsoft.TeamFoundationServer.ExtendedClient依赖于与.NET Core 3.0不兼容的Microsoft.AspNet.WebApi.Core,从而导致警告。将NoWarn添加到Microsoft.TeamFoundationServer.ExtendedClient将不起作用

    作为一种解决方法(您可以在这里看到我的帖子:),您可以直接引用可传递依赖项并对该包使用NoWarn

    
    
    是什么使库没有准备好.NET Core?它已经在nuget.org上了,所以我认为可以使用它吗?@fluer PusherClient是一个.Net框架库。若要在.Net Core 1.x上使用它,需要将其更改为.Net标准1.x库。@fluter但它是.Net Core 2.0版的一项新功能,您可以引用.Net Framework 4.6.1(及以下)库。是否可以抑制此类警告?是,将NU1701放入您的csproj中,您可能无法根据
    .csproj
    文件中的
    PackageReference
    抑制警告。我确实在这个问题上发现了一个悬而未决的问题:。投你的一票:)不过在
    里面应该没问题,不是吗?这要看情况而定。我的解决方案相当大,它广泛使用Directory.Build.Props文件来设置所有项目的公共设置。其中一个设置是向Suppress发出的警告列表。在这种情况下,不使用$(NoWarn),此项目将覆盖该列表,并且只有一个NU1707抑制。