dotnet 还原警告 NU1701

dotnet restore warning NU1701

提问人:fluter 提问时间:7/1/2017 最后编辑:Pangfluter 更新时间:11/27/2020 访问量:66036

问:

我正在将 .NET Core 与 C# 一起使用,当我这样做时,它给出了以下错误:dotnet restore

PS C:\workspace\Arbitrator>dotnet restore

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

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

C# .NET NuGet .net-core

评论


答:

8赞 D.R. 7/1/2017 #1

对于 .NET Core 1.x:For .NET Core 1.x:

你需要告诉 PusherClient 的家伙来制作他们的项目。NET-Core 就绪。

评论

0赞 fluter 7/1/2017
是什么让图书馆不.NET-Core 准备好了吗?它已经在 nuget.org 了,所以我认为可以使用它吗?
1赞 svick 7/2/2017
@fluter PusherClient 是一个 .Net Framework 库。若要在 .Net Core 1.x 上使用它,需要将其更改为 .Net Standard 1.x 库。
1赞 Sourcerer 7/10/2017
@fluter 但根据 MS 的说法,这是 .NET Core 2.0 版本的一项新功能,你可以引用 .NET Framework 4.6.1(及更低版本)库。
126赞 Sourcerer 7/10/2017 #2

不必等到 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>
    

    请参阅 NuGet wiki 中的方案 2 和 3,了解如何从 GUI 执行此操作

    但是,您的应用程序可能会在运行时失败 当您调用不支持的 API(例如 WPF 中的内容)时 由 .NET Core 提供。失败的另一个原因可能是本机 API 可能由 PusherClient 使用。因此,您应该对其进行广泛测试。 但在大多数情况下,它仅适用于 .NET Core 的所有平台 是受支持的(例如,我已经测试了一个具有 MathNet.Numerics 依赖项的应用程序,即使 MathNet.Numerics 也是 .NET Framework 4.6.1,它也可以在 Linux 上运行)。

  2. 如果不需要跨平台应用,只需通过将以下内容添加到 csproj 文件,将其目标框架更改为 .NET 4.6.1:

     <TargetFramework>net461</TargetFramework>
    

评论

1赞 mateuszlewko 11/2/2017
是否有可能抑制此类警告?
10赞 Lars Truijens 12/28/2017
是的,将 <PropertyGroup><NoWarn>NU1701</NoWarn></PropertyGroup> 放在 csproj 中
0赞 yair 11/2/2018
看不到禁止显示文件中的警告的方法。我确实在这个问题上发现了一个悬而未决的问题:github.com/NuGet/Home/issues/5740 .请投票:)PackageReference.csproj
49赞 Chris M. 1/30/2019 #3

顺便说一句,不要这样做:

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

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

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

这样,将保留所有全局设置。

评论

0赞 Ray 2/16/2019
不过,对于在里面来说,这应该没问题,不是吗?<PackageReference>
0赞 Chris M. 2/17/2019
这真的要看情况。我的解决方案相当大,它广泛使用 Directory.Build.Props 文件来设置所有项目的通用设置。其中一个设置是要抑制的警告列表。在本例中,如果没有 $(NoWarn),此项目将覆盖该列表,并且只有单个 NU1707 抑制。
5赞 Riddick 12/6/2019 #4

正如 Yair 所指出的,GitHub 上围绕这个主题存在一个悬而未决的问题:github.com/NuGet/Home/issues/5740

如果使用回退框架版本解析的依赖项是可传递的,则禁止显示引用包的警告将不起作用。

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

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

<ItemGroup>
    <PackageReference Include="Microsoft.AspNet.WebApi.Core" Version="5.2.3" NoWarn="NU1701" />
    <PackageReference Include="Microsoft.TeamFoundationServer.ExtendedClient" Version="16.153.0"/>
</ItemGroup>