便携式类库中的M2MQTT

时间:2015-09-18 21:02:56

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

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

我试图使用NuGet将M2MQTT包含在便携式类库(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.

其他信息9/24/2015

我克隆了M2MQTT GitHub repository并注意到Windows 8.1和Windows Phone 8.1有一个.pcl。我没有在.pcl中看到对UWP的支持。

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

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

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

其他信息9/28/2015 根据@Anders Gustafsson的建议,我成功创建了一个.pcl,我可以在我的UWP应用程序和Windows Phone 8.1应用程序中使用.pcl。不再重复代码。尼斯。希望这将适用于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

2 个答案:

答案 0 :(得分:1)

M2MQTT 可用作PCL配置文件32程序集,该程序集能够针对Windows 8.1,Windows Phone 8.1和Windows 10 / UWP项目。 M2Mqtt.WinRT 程序集实际上是PCL Profile 32程序集。

您遇到的问题是这个事实没有反映在 NuGet 包中。在 NuGet 包中, win81 wpa81 分别有 lib 文件夹, M2Mqtt.WinRT < / em>两者组装。理想的情况是应该有一个包含 M2Mqtt.WinRT 的单个子文件夹 portable-win81 + wpa81 ,然后一切都会(可能)完美无缺地工作对你而言。

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

  • 开始创建可移植类库,但将PCL的唯一目标设置为 Windows 8.1 。 (如果不能立即生效,请创建一个以 Windows 8.1 Windows Phone 8.1 为目标的PCL,并在创建PCL后,取消选中 Windows Phone 8.1 复选框。)
  • 将NuGet中的 M2MQTT 包添加到您的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 引用。 / p>

答案 1 :(得分:0)

我克隆了M2MQTT GitHub存储库,注意到Windows 8.1和Windows Phone 8.1有一个.pcl。我没有在.pcl中看到对UWP的支持。

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