【问题标题】:M2MQTT in Portable Class Library可移植类库中的 M2MQTT
【发布时间】:2015-12-16 03:11:38
【问题描述】:

我想在 Windows 10 通用 Windows 平台应用程序和 Windows Phone 8.1 应用程序之间共享我的 M2MQTT 代码。将来可能是 WPF 应用程序。

我尝试使用 NuGet 将 M2MQTT 包含在可移植类库 (PCL) 中。我将 PCL 的目标定为满足这两种项目类型的最低要求。我收到以下错误。是否可以在 UWP 和 WP8.1 项目都可以共享的可移植类库中引用 m2mqtt?

Attempting to gather dependencies information for package 'M2Mqtt.4.2.0.1' with respect to project 'Pcl45', targeting '.NETPortable,Version=v4.6,Profile=Profile32'
Attempting to resolve dependencies for package 'M2Mqtt.4.2.0.1' with DependencyBehavior 'Lowest'
Resolving actions to install package 'M2Mqtt.4.2.0.1'
Resolved actions to install package 'M2Mqtt.4.2.0.1'
Install failed. Rolling back...
Package 'M2Mqtt 4.2.0.1' does not exist in project 'Pcl45'
Could not install package 'M2Mqtt 4.2.0.1'. You are trying to install this package into a project that targets '.NETPortable,Version=v4.6,Profile=Profile32', but the package does not contain any assembly references or content files that are compatible with that framework. For more information, contact the package author.

附加信息 2015 年 9 月 24 日

我克隆了 M2MQTT GitHub repository 并注意到有一个适用于 Windows 8.1 和 Windows phone 8.1 的 .pcl。不过,我没有在 .pcl 中看到对 UWP 的支持。

我想我有我的答案。 No M2MQTT 在 UWP 项目中不支持 .pcl。

想知道将来是否有计划添加 .pcl 支持?

如果我可以在 Xamarin Android 或 Ios 项目中使用 M2MQTT?

附加信息 2015 年 9 月 28 日 根据@Anders Gustafsson 的建议,我成功创建了一个 .pcl,我可以在我的 UWP 应用程序和 windows phone 8.1 应用程序中使用它。不再重复代码。好的。希望这将适用于 xamarin android 和 ios。

有这个警告。

Severity    Code    Description Project File    Line    Source Warning
Some NuGet packages were installed using a target framework different from 
the current target framework and may need to be reinstalled. Visit 
http://docs.nuget.org/docs/workflows/reinstalling-packages for more 
information.  Packages affected: M2Mqtt Pcl45       0   Build

【问题讨论】:

    标签: wpf xamarin windows-phone-8.1 portable-class-library uwp


    【解决方案1】:

    我克隆了 M2MQTT GitHub 存储库,发现有一个适用于 Windows 8.1 和 Windows phone 8.1 的 .pcl。不过,我没有在 .pcl 中看到对 UWP 的支持。

    我想我有我的答案。不。M2MQTT 目前不支持 UWP 项目中的 .pcl。

    【讨论】:

    • 查看@anders-gustafsson 的答案,了解对我有用的解决方法。
    【解决方案2】:

    M2MQTT 以 PCL 配置文件 32 程序集的形式提供,能够针对 Windows 8.1、Windows Phone 8.1 和 Windows 10/UWP 项目。 M2Mqtt.WinRT 程序集实际上是一个 PCL Profile 32 程序集。

    您面临的问题是这一事实并未反映在 NuGet 包中。在 NuGet 包中有单独的 lib 文件夹用于 win81 和 wpa81 与 M2Mqtt.WinRT 两个程序集。理想的情况是应该有一个包含 M2Mqtt.WinRT 的子文件夹 portable-win81+wpa81,然后一切都会(可能)完美运行给你。

    似乎有一种解决方法,尽管我不能保证它是完全可靠的。

    • 开始创建可移植类库,但将 PCL 的唯一目标设置为 Windows 8.1。 (如果这不能立即起作用,请创建一个针对 Windows 8.1 和 Windows Phone 8.1 的 PCL,并在创建 PCL 后,取消选中 Windows Phone 8.1 复选框。)
    • 将 M2MQTT 包从 NuGet 添加到您的 PCL。您的 PCL 现在将引用 win81 子文件夹中的 M2Mqtt.WinRT 程序集。
    • 将 Windows Phone 8.1 添加为 PCL 的目标,以便您的 PCL(再次)同时针对 Windows 8.1 和 Windows Phone 8.1 .执行此操作时,您可能会收到来自 NuGet 的警告消息;忽略这些消息。

    现在,您应该能够从您的 PCL 使用 M2Mqtt.WinRT 程序集,并且您还应该能够在 UWP 应用程序中引用您的 PCL。

    要在您设法从 NuGet 下载 M2MQTT 包后增加可靠性,您可以手动删除然后重新添加对 M2Mqtt.WinRT 程序集的引用在您的 PCL 项目中。这样,您将短路 NuGet,防止 NuGet 意外尝试从不存在的 (portable-win81+wpa81) 目录恢复您的 M2Mqtt.WinRT 引用。

    【讨论】:

    • 酷!有效。我的 .pcl 中有一个警告(我试图在此评论中内联代码,我似乎无法引入换行符??我将在我的原始帖子中添加)
    • 很高兴听到它对您有用。我还在 Github 上发布了an issue,以便最终 M2MQTT 维护者可以更永久地解决问题。关于iOS和Android; PCL Profile 32 专门针对现代 Windows,并且不与 iOS 和 Android 兼容。我没有尝试过,但也许 .NET 源代码足够通用,可以为 iOS 和 Android 编译?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多