我正在使用带有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,我只是按照块文件导入它,如何修复此警告?
答案 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的功能。
您可以取消此警告
<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)。如果您不希望您的应用程序是跨平台的,只需将以下内容添加到您的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>