2009-06-19 46 views
1

是否可以創建可從.Net 2.0中使用的庫,並且還允許.Net 3.0+客戶如果願意可以從DataContracts中受益?支持.Net 2.0庫中的DataContracts

我沒有看到任何技術障礙,除了包含不同的DataContract相關屬性的庫之外,它是一個.Net 3.0庫。這些屬性可以像ExtensionMethodAttribute類似的方式手動實現嗎?

回答

1

如果您將.NET 3.0屬性添加到程序集中,那麼只能在僅使用.NET 2.0的計算機上運行該程序,這相當於在運行時不可用的程序集中擁有代碼屬性。

只要.NET 2.0應用程序沒有實際嘗試讀取屬性,這將大體上正常工作。例如,下面的代碼將拋出一個FileNotFoundException異常,因爲如果使用.NET 2.0的機器上運行它,將無法加載System.ServiceModel.dll:

[ServiceContract] // Attribute from System.ServiceModel.dll 
class MyClass 
{ 
    ... 
} 
... 
    // this will throw a FileNotFoundException if System.ServiceModel.dll is not available 
    object[] attributes = typeof(MyClass).GetCustomAttributes(false); 

因此,如果你不知道誰將會消耗你的班級圖書館,你不能保證100%你不會打破他們。

通過使用System.ServiceModel.dll(或其他包含您正在使用的屬性的程序集)的副本,或者(我認爲)通過使用GetCustomAttributes的重載來接收系統,可以避免上述情況。輸入參數,因此您只能讀取已知可用的屬性。

0

由於.NET 2.0和.NET 3.0和3.5使用相同的CLR(2.0),所以不應該有任何困難。

+0

如果運行在沒有安裝.Net 3.0的計算機上的.Net 2.0客戶端嘗試讀取屬性,會發生什麼情況?我目前沒有這樣的客戶,所以我無法測試這個。 – 2009-06-19 21:02:31