Question

Est-il possible de créer une bibliothèque pouvant être utilisée à partir de .Net 2.0 et permettant aux utilisateurs .Net 3.0+ de bénéficier de DataContracts s’ils le souhaitent?

Je ne vois pas d'obstacle technique autre que la bibliothèque contenant les différents attributs liés à DataContract est une bibliothèque .Net 3.0. Ces attributs peuvent-ils être implémentés manuellement de la même manière que ExtensionMethodAttribute?

Était-ce utile?

La solution

Si vous ajoutez des attributs .NET 3.0 à un assembly, puis l'exécutez sur une machine avec .NET 2.0 uniquement, cela revient à avoir un attribut sur votre code provenant d'un assembly qui n'est pas disponible au moment de l'exécution.

Cela fonctionnera généralement très bien tant que l'application .NET 2.0 ne tentera pas réellement de lire les attributs. Par exemple, le code suivant lève une exception FileNotFoundException car il ne parviendra pas à charger System.ServiceModel.dll s'il est exécuté sur une machine avec .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);

Par conséquent, si vous ne savez pas qui consommera votre bibliothèque de classes, vous ne pouvez pas garantir à 100% que vous ne les casserez pas.

Pour éviter ce qui précède, envoyez une copie de System.ServiceModel.dll (ou un autre assemblage contenant les attributs que vous utilisez) avec votre application, ou (je pense) en utilisant la surcharge de GetCustomAttributes qui prend un System.Type. argument, de sorte que vous ne lisiez que les attributs connus pour être disponibles.

Autres conseils

Etant donné que .NET 2.0 et .NET 3.0 et 3.5 utilisent le même CLR (2.0), vous ne devriez pas rencontrer de difficultés.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top