Windows 8 选择Windows运行时组件与可移植代码库

Windows 8 选择Windows运行时组件与可移植代码库,windows-8,windows-runtime,windows-phone-8,portable-class-library,Windows 8,Windows Runtime,Windows Phone 8,Portable Class Library,在Windows Phone 8和Windows 8之间共享代码时,开发人员的两个核心选项是1)Windows运行时组件和2)门户类库 使用WinRT,可以将其投影到所有受支持的语言中。在不同平台上使用时,它们需要在单独的项目(二进制文件)中链接文件。但是,它们共享90%的可用WinRT API 是具有跨平台二进制兼容性的BCL的子集(有时是重要子集)。它们可以用于WinRT应用程序,也可以用于其他项目类型,如Silverlight、Xbox等 当开发人员选择“共享策略”时,哪种项目类型是在Wi

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

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

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


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

如果要在Windows Phone 8和Windows 8之间共享代码,则不能使用Windows运行时组件,因为Windows 8使用的组件不同,Windows Phone 8使用的组件也不同,因此它们不能互换。
对于一些简单的泛型库,我会选择可移植类库,或者通过链接和#如果WP8编译指令,则选择代码共享-这正好有效,并且比可移植库更强大。

还请记住,大多数外部库(如MVVM Light)不能在便携库中引用,因此如果您想使用它们,必须通过文件引用使用代码共享。

这取决于您需要的共享形式:

<强> 1)如果您有一个普通的C++业务逻辑层,您可以使用Windows运行时(WINRT)组件来将此公开给Windows Phone和Windows Store App(这是Windows Phone唯一的用例,因为您不能使用JavaScript编写WP8应用程序或使用.NET编写WINRTE组件)。p> 但是,您必须构建两个独立的WinRT组件,一个用于Phone,另一个用于Windows应用商店。应该可以使用预处理器指令(

#if
)来标记特定于平台的代码,共享WinRT互操作层的C++/CX代码

2)C#/VB中的业务逻辑只依赖于可移植类库中可用的.NET API。然后可以使用可移植类库(PCL)来包含该逻辑。基本上,如果您可以将库构建到PCL DLL中,那么这应该是可行的。然后,您可以在Windows Phone和Windows应用商店应用程序中以二进制形式引用此PCL

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


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

有关如何有效地使用可移植类库在平台之间共享代码的一些指导,请参阅以下博客文章:


这个问题与Windows的引入不再相关 Visual Studio 2013更新2中的Phone 8.1通用应用程序支持 共享项目

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

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

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

我只能看到它们之间的一个巨大区别:
WinMD只使用WinRT,PCL也可以与.Net和Silverlight一起使用。但是我也想知道更多关于哪一个以及何时更好地选择。

还有源文件链接技术。。。没有WinRT组件或PCL。这个问题与在Visual Studio 2013更新2中引入Windows Phone 8.1通用应用程序不再相关,后者支持共享项目。@JerryNixon MSFT-这是一块有趣的智慧宝石,你能再扩展一下吗?“sahred项目”是如何工作的?它解决了什么问题?实际上,有一个PCL版本的MVVM Light-NuGet软件包是Portable.MvvmLightLibs,源代码在这里:@Martin Suchan-“如果你想在Windows Phone 8和Windows 8之间共享代码,那么你就不能使用Windows运行时组件…”取决于共享代码的含义。您不能创建同时以WinRT和WP8为目标的单个WRC项目,但可以为每个项目创建一个,并且两个项目都可以引用相同的C/C++源代码。@Martin Suchan&@Scott Smith?因为有一个
Windows运行时组件(对于universalwindows8.1来说是可移植的)
template选项。描述中说,“一个为Windows和Windows Phone应用程序创建托管Windows运行时组件的项目,无论应用程序使用何种编程语言编写”。@bunkerdrive-Universal最近出现;我的帖子来自2013年。Visual Studio 2014社区版是免费的。此外,Visual Studio 2015社区版将是免费的。如果您的情况允许,我建议您更新Visual Studio。