Dot-Net
多目標 .NET 庫的最佳實踐
我計劃發布一個開源 (MIT) .NET 庫,但還包括 DLL 以方便人們使用,因此他們不必自己編譯所有內容。
我的庫在它引用的類型上非常簡單,唯一真正的依賴似乎是 .NET 3.0 或更高版本(因為它引用
Func<T>等)。我希望我的庫可供多個目標使用,包括 .NET 4.0 伺服器、.NET 3.5 伺服器、Windows Phone 7 Silverlight、普通 Silverlight、XNA(電話)、XNA(Windows)和 XNA(XBox 360)。
我確保不使用在我的目標平台上不可用的任何類型,例如
HashSet<T>在 Windows Phone 7 上不可用的類型,所以我沒有使用它。我是否需要為每個目標創建不同的項目並因此創建多個 DLL,或者是否有某種方法可以生成一個通用的 DLL 供所有人使用?
今年在 PDC 上有一個關於做這類事情的演講:
使用共享的公共源文件將項目文件分開是可行的方法。確保將項目設置為建構到不同的輸出文件夾(例如 not
\bin\Debug, but\CF\bin\debug),以防止在從多個目標(如桌面和設備項目)使用庫時產生煩惱。OpenNETCF.IoC 框架就是一個例子——它支持桌面、CF、Windows Phone 和 MonoTouch,所有這些都具有相同的源文件,但每個平台的項目文件不同。試圖編譯成一個對所有這些都可用的二進製程序集太混亂且難以維護。
這裡的主要痛點是在添加/更改文件時保持所有項目文件同步,並確保所有文件始終編譯。如果您可以訪問自動化(不幸的是 Codeplex 沒有公開),則建構伺服器可以做到這一點。