dotnet恢复警告NU1701

时间:2017-07-01 13:00:53

标签: c# .net nuget .net-core

我正在使用带有C#的.NETCore,当我执行dotnet restore时,它出现了以下错误:

  

PS C:\ workspace \ Arbitrator> dotnet restore

     

C:\ workspace \ Arbitrator \ Arbitrator.csproj:警告NU1701:Package' PusherClient 0.5.0'使用' .NETFramework,Version = v4.6.1'进行了恢复。而是项目目标框架' .NETCoreApp,Version = v2.0'。这可能会导致兼容性问题。   C:\ workspace \ Arbitrator \ Arbitrator.csproj:警告NU1701:Package' WebSocket4Net 0.14.1'使用' .NETFramework,Version = v4.6.1'进行了恢复。而是项目目标框架' .NETCoreApp,Version = v2.0'。这可能会导致兼容性问题。

此问题包是PusherClient,我只是按照块文件导入它,如何修复此警告?

4 个答案:

答案 0 :(得分:47)

您不必等到 PusherClient 升级为.NET Core。

从.NET Core引用.NET Framework 4.6.1(及以下版本)是一个new feature,自.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>
    

    See scenarios 2 and 3 in NuGet wiki for ways to do it from GUI

    但是,有可能您的应用程序可能在运行时失败 当你调用不受支持的API(像来自WPF的东西)时 通过.NET Core。失败的另一个原因可能是本机API 可能由 PusherClient 使用。所以你应该广泛测试它。 但在大多数情况下,它只适用于.NET Core的所有平台 支持(例如,我已经测试了一个应用程序 MathNet.Numerics 依赖,即使它在Linux上运行 MathNet.Numerics 也是.NET Framework 4.6.1)。

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

    <TargetFramework>net461</TargetFramework>
    

答案 1 :(得分:8)

对于.NET Core 1.x:

你需要告诉PusherClient的人们让他们的项目准备好.NET-Core。

答案 2 :(得分:6)

请注意,请勿这样做:

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

这样做将破坏其他任何从其他位置获取的NoWarn设置,例如从directory.build.prop文件中获取的设置。而是这样做:

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

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

答案 3 :(得分:0)

正如Yair所指出的,在Github上有一个关于这个主题的公开问题:github.com/NuGet/Home/issues/5740

在使用后备框架版本解决的依赖项具有传递性的情况下,禁止对所引用程序包的警告无效。

例如,Microsoft.TeamFoundationServer.ExtendedClient依赖于与.Net core 3.0不兼容的Microsoft.AspNet.WebApi.Core,从而导致警告。无法将NoWarn添加到Microsoft.TeamFoundationServer.ExtendedClient。

作为一种变通方法(您可以在这里查看我的帖子:Workaround On 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>