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

时间:2018-04-06 08:07:47

标签: xamarin mvvmcross .net-standard-2.0

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

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

  

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

以下是确切的警告

  

警告NU1701:软件包' MvvmCross.Core 5.7.0'恢复使用   ' .NETFramework,版本= v4.6.1'而不是项目目标框架   ' .NETStandard,版本= 2.0&#39 ;.此包可能不完全兼容   与您的项目。

MvvmCross.Platform 5.7.0

的类似警告

[NuGet package warnings

2 个答案:

答案 0 :(得分:6)

由于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标准中有一些API   2.0规范,不在.NET Framework 4.6.1中,但如果需要,可以通过NuGet包引入它们)。所以你看到的警告是   通知您包不符合.NET标准版   你是目标,因此可能包含不是的API   运行时中的可执行文件,可以使用.NET Standard 2.0   库。

如何取消警告

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

每个包

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

VS 2017 - properties

结果与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> 

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

项目级别

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

<PropertyGroup>
  <WarningsAsErrors>NU1701</WarningsAsErrors>
</PropertyGroup>

或者通过GUI,您可以修改Specific warnings以包含NU1701

VS 2017 - properties

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

答案 1 :(得分:2)

此错误消息很简单,这意味着MvvmCross尚未更新为net.standard。

在Net.Standard广泛适应之前,这将是掘金的一个常见错误。但是在这种情况下有一个解决方案。

https://www.mvvmcross.com/documentation/getting-started/netstandard

When using .NET Standard 2 you do not need to specify a package target fallback. In .NET Standard 2 the PackageTargetFallback flag has been deprecated and instead defaults to net461 (.NET Framework 4.6.1) or higher. If however, this does not suit your use case you can override this behaviour with the AssetTargetFallback.

<AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback>