C# dotnet还原警告NU1701
我将.NET Core与C#一起使用,当我执行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:包“
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抑制。