2013-01-06 27 views
3

對於當前僅爲.NET 4實現的庫,我有一個NuGet包。但是我已經移植了庫代碼以支持各種平臺(WinRT, SL5,WP8),所以我想將它打包爲便攜式類庫(PCL)以簡化維護工作。但庫使用LINQ到需要針對.NET 4.0.3和客戶機上installting .NET 4.0.3 XML(XELements等)。使用可移植類庫從NuGet包中實現.NET 4的最佳策略

所以我有一個關於如何針對純淨的.NET 4的困境。如果它不是關於NuGet包和我有一個用戶羣的控制,我可以簡單地聲明爲安裝.NET 4.0.3運行時的先決條件。不過,我不希望以任何方式限制用戶羣,所以看起來我必須有圖書館的兩個版本:便攜式面向.NET 4.5,SL5和WP8和非便攜式靶向只是.NET4。什麼是愚蠢的是,這兩個庫將擁有完全相同的代碼,因爲LINQ到XML是.NET 4的支持,當然,這只是針對.NET 4時

我的第一個問題是,沒有這樣的支持PCLS這似乎是一個正確的策略?另一種方法是從PCL帶走所有的XElement相關的代碼,並讓它在非便攜的部分,但是這似乎並沒有正確的,因爲代碼將是所有圖書館完全相同。

第二個問題是根據.NET 4.0.3從PCL定位是否有意義:如果我有單獨的版本以.NET 4爲目標,那麼安裝了.NET 4.0.3運行時的用戶將從獲得PCL而不是純.NET 4版本?我知道.NET 4.0.3有其他改進,但這些不會影響我的庫。

+0

您確定XElement不支持PCL嗎?我知道它並不是早期版本的PCL,但我擁有大量使用XElement的PCL。 –

+0

不適用於初始NET 4.0,它必須升級到4.0.3,請參閱兼容性列表:http://msdn.microsoft.com/en-us/library/gg597391.aspx –

回答

2

是的,我認爲最好的辦法是創建兩個版本的庫,一個針對.NET 4,另一個針對您支持的其他平臺的便攜式庫。使用源文件鏈接,因此您不必擁有兩個不同的源代碼副本,只需兩個不同的Visual Studio項目即可。

你只需要一個NuGet包。放入的lib/net40的.NET 4版和便攜式版本的lib /便攜式net403 + win8的+ WP8 + SL5(或者你決定支持任何平臺的組合)。然後NuGet將根據項目的目標安裝正確的。需要NuGet 2.1或更高版本才能用於便攜式版本。

參考關於.NET 4.0.3的問題,它是關於給消費者的庫靈活性。使用您的庫的人正在使用它來創建應用程序。支持.NET 4可能不像它那樣重要。通過在庫的便攜版本,支持.NET 4.0.3,這意味着,如果他們選擇需要.NET 4.0.3在他們的應用程序,那麼他們將能夠使用你的庫從他們自己的便攜式庫,更容易share their app code across platforms

+0

謝謝丹尼爾,我希望得到一個來自你的回答,並且它有很大的幫助。 –