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。 –