Поддержка DataContracts в библиотеках .Net 2.0 - PullRequest
1 голос
/ 20 июня 2009

Можно ли создать библиотеку, которая будет использоваться из .Net 2.0, а также позволит потребителям .Net 3.0+ воспользоваться DataContracts, если они того пожелают?

Я не вижу никаких технических препятствий для этого, кроме библиотеки, которая содержит различные атрибуты, связанные с DataContract, - библиотеки .Net 3.0. Могут ли эти атрибуты быть реализованы вручную так же, как ExtensionMethodAttribute?

Ответы [ 2 ]

1 голос
/ 20 июня 2009

Если вы добавляете атрибуты .NET 3.0 в сборку, а затем запускаете ее на компьютере только с .NET 2.0, это означает наличие атрибута в вашем коде из сборки, недоступной во время выполнения.

Это в основном будет работать нормально, если приложение .NET 2.0 на самом деле не пытается прочитать атрибуты. Например, следующий код вызовет исключение FileNotFoundException, поскольку он не сможет загрузить System.ServiceModel.dll при запуске на компьютере с .NET 2.0:

[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, которая принимает System.Type. аргумент, поэтому вы читаете только те атрибуты, о которых известно, что они доступны.

0 голосов
/ 20 июня 2009

Поскольку .NET 2.0 и .NET 3.0 и 3.5 используют одну и ту же CLR (2.0), у вас не должно возникнуть никаких проблем.

...