使用'.NETFramework,Version = v4.6.1'而不是项目目标框架'.NETStandard,Version = v2.0'恢复了MvvmCross.Core/Platform 5.7.0'

San*_*osh 4 mvvmcross xamarin .net-standard-2.0

我正在使用最新版本的MvvmCross创建一个Android和iOS应用程序.现在,由于不推荐使用可移植类库,我使用的是.NET标准库2.0版.

我在MvvmCross的NuGet包中有这个警告.....虽然项目编译但是我不确定我是否需要担心它,因为最后一行说

此软件包可能与您的项目不完全兼容.

以下是确切的警告

警告NU1701:使用'.NETFramework,Version = v4.6.1'而不是项目目标框架'.NETStandard,Version = v2.0'恢复了包'MvvmCross.Core 5.7.0'.此软件包可能与您的项目不完全兼容.

类似的警告 MvvmCross.Platform 5.7.0

[NuGet包警告

Pla*_*d3r 7

由于J.Dhaik已经提到过MvvmCross版本5.7.0尚未更新以支持.NET Standard.下一个主要版本6.0.0将添加对.NET Standard 2.0的支持.

但是,可以在.NET Standard类库中使用6.0.0之前的MvvmCross版本.

那警告为什么呢?

您可以查看我在此Stack Overflow问题上给出的解释,了解为什么您会看到警告.提取下面

使用.NET Standard 2.0和.NET Core SDK 2+中的更新工具,.NET团队希望更容易更新或使用.NET标准库.问题是并非所有NuGet包都已更新以支持.NET Standard版本.因此,他们引入了针对.NET Framework 4.6.1的回退,它几乎100%符合.NET标准(.NET Standard 2.0规范中有一些API不在.NET Framework 4.6.1中,但它们可以是如果需要,通过NuGet包带入).因此,您看到的警告是通知您这些软件包不符合您所针对的.NET标准版本,因此可能包含使用.NET Standard 2.0库在运行时中无法执行的API.

如何压制警告

NuGet提供两个选项,每个包项目级别.

每包

您可以编辑csproj并将NoWarn="NU1701"标记添加到包引用或选择NuGet包引用的属性(解决方案资源管理器>依赖关系> NuGet> {包名称}右键单击属性)并添加NU1701NoWarn属性.

VS 2017  - 物业

结果与csproj中的以下内容类似

<ItemGroup>
  <PackageReference Include="MvvmCross" Version="5.7.0" NoWarn="NU1701" />
  <PackageReference Include="MvvmCross.Core" Version="5.7.0" NoWarn="NU1701" />
  <PackageReference Include="MvvmCross.Binding" Version="5.7.0" NoWarn="NU1701" />
  <PackageReference Include="MvvmCross.Platform" Version="5.7.0" NoWarn="NU1701" />
  <PackageReference Include="MvvmCross.CodeAnalysis" Version="5.7.0" NoWarn="NU1701" />
</ItemGroup> 
Run Code Online (Sandbox Code Playgroud)

请注意,使用每个包方法依赖包警告不会通过抑制父包来抑制.因此,您需要将包作为依赖项引入以抑制警告.

项目级别

NuGet还为您提供了NU1701在项目级别禁止所有警告的选项.您可以通过手动编辑csproj来执行此操作,如下所示

<PropertyGroup>
  <NoWarn>NU1701</NoWarn>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

或者通过GUI可以修改Suppress warnings为包含NU1701

VS 2017  - 物业


注意,当完成清理和重建时,构建警告将消失,您仍可以在NuGet包引用上看到黄色警告图标.这可能需要重新加载项目才能清除.这可以通过卸载和重新加载项目来实现.