【问题标题】:MvvmCross.Core/Platform 5.7.0' was restored using '.NETFramework,Version=v4.6.1' instead of the project target framework '.NETStandard,Version=v2.0'使用 '.NETFramework,Version=v4.6.1' 而不是项目目标框架 '.NETStandard,Version=v2.0' 恢复了 MvvmCross.Core/Platform 5.7.0'
【发布时间】:2018-04-06 08:07:46
【问题描述】:

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

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

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

以下是确切的警告

警告 NU1701:包“MvvmCross.Core 5.7.0”已使用恢复 '.NETFramework,Version=v4.6.1' 代替项目目标框架 '.NET 标准,版本 = v2.0'。此软件包可能不完全兼容 与您的项目。

MvvmCross.Platform 5.7.0 的类似警告

[

【问题讨论】:

  • 什么是“这个警告”?标题行中的那个(它不应该是!)不包含您引用的最后一行
  • 是的,由于标题的字符限制,我无法添加最后一行。但是是的,警告也包含最后一行。 “警告 NU1701:包 'MvvmCross.Core 5.7.0' 是使用 '.NETFramework,Version=v4.6.1' 而不是项目目标框架 '.NETStandard,Version=v2.0' 恢复的。此包可能不完全兼容与你的项目。” MvvmCross.Platform 5.7.0 的类似警告
  • 那么,您为什么不分享问题中的完整错误消息?请尝试并使用更好的标题来简要说明您的问题
  • 感谢已编辑描述以包含确切的警告

标签: xamarin mvvmcross .net-standard-2.0


【解决方案1】:

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

如何抑制警告

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

每包

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

结果将类似于您的 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>
  <NoWarn>NU1701</NoWarn>
</PropertyGroup>

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

【讨论】:

  • 感谢详细解释
  • 谢谢你,在我的情况下,警告没有被抑制,直到我将 NU1701 标记为位于屏幕截图中上一级的“抑制警告”。
  • 谢谢,但这不正确!不要使用“警告作为错误”,而是将“NU1701”放入 “抑制警告:” 字段或在 *.csproj 中添加 &lt;NoWarn&gt;NU1701&lt;/NoWarn&gt;(在与调试/发布配置相关的属性组下)。我还可以确认黄色警告图标立即消失,无需清理或重新加载项目。
  • 感谢@MikeKeskinov,你是 100% 正确的,我已经更新了答案。
【解决方案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>

【讨论】:

  • 不,警告仍然存在.....我确实尝试通过编辑 csproj 文件将其添加到 .Net Standard 项目的属性组中,但没有运气。
猜你喜欢
  • 2018-06-07
  • 2018-06-20
  • 2018-10-21
  • 2019-10-22
  • 2018-11-25
  • 1970-01-01
  • 2022-01-15
  • 2018-04-10
  • 2019-10-09
相关资源
最近更新 更多