提问人:fluter 提问时间:7/1/2017 最后编辑:Pangfluter 更新时间:11/27/2020 访问量:66036
dotnet 还原警告 NU1701
dotnet restore warning NU1701
问:
我正在将 .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 文档导入它。如何修复此警告?
答:
对于 .NET Core 1.x:For .NET Core 1.x:
你需要告诉 PusherClient 的家伙来制作他们的项目。NET-Core 就绪。
评论
不必等到 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。
您可以禁止显示此警告
- 对于特定包
<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 上运行)。
如果不需要跨平台应用,只需通过将以下内容添加到 csproj 文件,将其目标框架更改为 .NET 4.6.1:
<TargetFramework>net461</TargetFramework>
评论
PackageReference
.csproj
顺便说一句,不要这样做:
<PropertyGroup>
<NoWarn>NU1701</NoWarn>
</PropertyGroup>
这样做会破坏在其他地方(例如从 directory.build.prop 文件)获取的任何其他 NoWarn 设置。相反,请执行以下操作:
<PropertyGroup>
<NoWarn>$(NoWarn);NU1701</NoWarn>
</PropertyGroup>
这样,将保留所有全局设置。
评论
<PackageReference>
正如 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>
评论