是否可以创建一个可以从 .Net 2.0 使用的库,并且如果他们愿意,还允许 .Net 3.0+ 消费者从 DataContracts 中受益?
除了包含不同 DataContract 相关属性的库是 .Net 3.0 库之外,我没有看到任何技术障碍。这些属性可以像 ExtensionMethodAttribute 一样手动实现吗?
是否可以创建一个可以从 .Net 2.0 使用的库,并且如果他们愿意,还允许 .Net 3.0+ 消费者从 DataContracts 中受益?
除了包含不同 DataContract 相关属性的库是 .Net 3.0 库之外,我没有看到任何技术障碍。这些属性可以像 ExtensionMethodAttribute 一样手动实现吗?
如果您将 .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 的重载来避免上述情况,所以您只读取已知可用的属性。
由于 .NET 2.0 和 .NET 3.0 和 3.5 使用相同的 CLR (2.0),因此您应该没有任何困难。