是否有可能创建一个可以从.Net 2.0中使用的库,并且如果他们愿意,还允许.Net 3.0+消费者从DataContracts中受益?
除了包含不同DataContract相关属性的库是.Net 3.0库之外,我没有看到任何技术障碍。这些属性是否可以与ExtensionMethodAttribute?
类似的方式手动实现答案 0 :(得分: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(或其他包含您正在使用的属性的程序集)的副本,或者(我认为)使用带有System.Type的GetCustomAttributes的重载,可以避免上述情况。参数,所以你只读取已知可用的属性。
答案 1 :(得分:0)
由于.NET 2.0和.NET 3.0和3.5使用相同的CLR(2.0),因此您不应该遇到任何困难。