6

在Windows Phone 8和Windows 8之间共享代码时,开发人员的两个核心选项是1)Windows运行时组件和2)门户类库。选择Windows运行时组件与可移植代码库

Windows Runtime Components使用WinRT,可以投影到所有支持的语言。在不同的平台上使用时,它们需要在单独的项目(二进制文件)中链接文件。但是,它们共享可用WinRT API的90%。

Portable Class Libraries是BCL的子集(有时是重要的子集),它具有跨平台的二进制兼容性。它们可用于WinRT应用程序,也可用于其他项目类型,如Silverlight,Xbox等。

当开发人员选择“共享策略”时,哪种项目类型是实现最佳工作共享的首选技术Windows Phone 8和Windows 8之间的代码?谢谢。

+1

然后还有源文件链接技术......没有WinRT组件或PCL。 –

+0

此问题不再与支持共享项目的Visual Studio 2013 Update 2中的Windows Phone 8.1通用应用程序的引入有关。 –

+0

@ JerryNixon-MSFT - 这是一个有趣的智慧宝石,你可以扩展一下吗?一个'被清洗的项目'如何工作,它解决了什么问题? –

回答

3

如果您想共享Windows Phone 8和Windows 8之间的代码,那么您不能使用Windows运行时组件,因为Windows 8有不同的组件,而Windows Phone 8不同,它们不可互换。
我会去一些简单的通用库的便携式类库,或通过链接和#if WP8编译指令共享代码 - 这只是工作,并且比便携式库更强大。
请记住,像MVVM Light这样的大多数外部库不能在Portable Libs中引用,所以如果你想使用它们,你必须通过文件引用来使用代码共享。

+3

实际上,有一个MVVM Light的PCL版本 - NuGet包是Portable.MvvmLightLibs和源代码在这里:http://mvvmlight.codeplex.com/SourceControl/network/forks/onovotny/MvvmLightPortable/ –

+2

@Martin Suchan - “如果你想共享Windows Phone 8和Windows 8之间的代码,那么你不能使用Windows运行时组件...” 取决于你的意思_share code_。您不能创建一个既定位于WinRT又定位于WP8的**单个** WRC项目,但您可以为每个**创建一个**,并且这两个项目都可以引用相同的C/C++源代码。 –

+0

@Martin Suchan&@Scott Smith,[你确定](http://s2.postimg.org/gm9wext2x/Win_Runtime_Comp_Portable.png)?因为有一个'Windows运行时组件(Portable for Universal Windows 8.1)'模板选项。说明中提到“无论应用程序编写的编程语言如何,都可以为Windows和Windows Phone应用程序创建受管Windows运行时组件”。 – bunkerdive

4

这取决于什么分享您的形式需要:

1)如果你有一个共同的C++商业逻辑层您可以使用Windows运行时(WinRT的)部件,以使本到Windows Phone和Windows商店应用都(这是Windows Phone的唯一用例,因为您无法使用JavaScript编写WP8应用程序或使用.NET创作WinRT组件)。

但是,您必须构建两个独立的WinRT组件,一个用于电话,一个用于Windows应用商店。应该可以使用预处理器指令(#if)共享WinRT interop层的C++/CX代码来标记特定于平台的代码。

2)您拥有C#/ VB中的业务逻辑,它们只依赖于可移植类库中提供的.NET API。然后,您可以使用可移植类库(PCL)来包含该逻辑。基本上如果你可以建立你的库到PCL DLL然后这应该工作。然后,您可以在Windows Phone和Windows Store应用程序中以二进制形式引用此PCL。

但是,正如Martin所说的,在使用第三方库时需要小心,因为这些库也需要为PCL构建。一些第三方库已经以PCL形式提供(例如JSON.NET)。

3)您希望共享那些具有PCL不支持的平台API依赖关系(或第三方库依赖关系)的代码。然后你需要创建单独的DLL库,每个平台一个。您可以避免使用链接的C#/ VB源文件进行代码复制,并使用构建标志(#if)来允许目标平台之间的小代码更改。

1

这个问题是不再与引进的Windows 电话8.1通用应用程序的相关Visual Studio 2013 Update 2,它支持 共享项目。

即使在Visual Studio 2013更新4这个问题,稍等片刻,对我来说仍然是相关的,因为有两种类型的项目有:

类库(便携式通用应用程序) - PCL

Windows运行时组件(便携式通用应用程序) - WinMD

我只能看到它们之间的一个很大的区别: WinMD只使用WinRT,而PCL也可以使用.Net和Silverlight。但我也想知道更多关于哪一个,什么时候选择更好。

+0

Visual Studio 2014社区版是免费的。而且,Visual Studio 2015社区版将免费。如果您的情况允许,我建议您更新Visual Studio。 –