Frage

Ist es möglich, eine Bibliothek zu erstellen, die von .Net 2.0 verbraucht werden kann und ermöglicht auch .Net 3.0+ Verbraucher von Datacontracts zu profitieren, wenn sie dies wünschen?

Ich sehe kein technisches Hindernis für diese andere als die Bibliothek, die die verschiedenen Datacontract bezogene Attribute enthält, ist eine .NET 3.0-Bibliothek. Können diese Attribute manuell in ähnlicher Weise wie ExtensionMethodAttribute umgesetzt werden?

War es hilfreich?

Lösung

Wenn Sie .NET 3.0 Attribute zu einer Baugruppe hinzufügen, dann ist dieser mit 2,0 nur .NET auf einem Computer ausgeführt werden, dies entspricht ein Attribut auf dem Code von einer Baugruppe aufweist, die zur Laufzeit nicht verfügbar ist.

Dies wird meist gut funktionieren, solange die .NET 2.0-Anwendung versucht nicht, tatsächlich die Attribute zu lesen. Zum Beispiel wird der folgende Code ein FileNotFoundException werfen, weil es System.ServiceModel.dll geladen wird scheitern, wenn auf einer Maschine läuft mit .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);

Also, wenn Sie nicht wissen, wer Ihre Klassenbibliothek verbrauchen, können Sie nicht garantieren 100%, dass Sie sie nicht brechen.

Die obige kann durch Versand einer Kopie System.ServiceModel.dll (oder einer anderen Baugruppe enthält Attribute, die Sie verwenden) vermieden werden, mit Ihrer Anwendung, oder (glaube ich), indem Sie die Überlastung von GetCustomAttributes verwenden, die ein System.Type nimmt Argument, so dass Sie nur Attribute lesen, die verfügbar sind, bekannt sein.

Andere Tipps

Da .NET 2.0 und .NET 3.0 und 3.5 verwenden die gleiche CLR (2.0), sollten Sie keine Schwierigkeiten haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top