Pergunta

É possível criar uma biblioteca que pode ser consumida a partir de .Net 2.0 e também permite .Net 3.0 ou superior aos consumidores beneficiar de DataContracts se assim o desejarem?

Não vejo qualquer obstáculo técnico para este outro do que a biblioteca que contém os diferentes atributos relacionados DataContract é um 3.0 biblioteca .Net. Podem estes atributos ser implementado manualmente de forma semelhante como ExtensionMethodAttribute?

Foi útil?

Solução

Se você adicionar .NET 3.0 atributos para uma montagem, em seguida, executar isso em uma máquina com .NET 2.0 só, isso equivale a ter um atributo no seu código a partir de uma montagem que não está disponível em tempo de execução.

Este trabalho bem, na sua maioria, desde que o .NET 2.0 aplicativo na verdade não tentar ler os atributos. Por exemplo, o código a seguir irá lançar uma FileNotFoundException porque ele vai deixar de carregar System.ServiceModel.dll se executado em uma máquina com .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);

Portanto, se você não sabe quem estará consumindo sua biblioteca de classe, você não pode garantir 100% que você não vai quebrá-las.

A descrição acima pode ser evitado pelo envio de uma cópia do System.ServiceModel.dll (ou outros atributos de montagem contendo você estiver usando) com a sua aplicação, ou (eu acho) usando a sobrecarga de GetCustomAttributes que leva um System.Type argumento, assim você só ler os atributos que são conhecidos para estar disponível.

Outras dicas

Desde .NET 2.0 e .NET 3.0 e 3.5 utilizam o mesmo CLR (2.0), você não deve ter nenhuma dificuldade.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top