是否有可能创建一个可以从 .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),因此您不应该遇到任何困难。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top