2015-02-23 13 views
5

Update: Natürlich habe ich versucht, using System.ComponentModel.DataAnnotations hinzuzufügen. Es funktioniert nicht.Das erforderliche Attribut in der Klassenbibliothek asp.net vnext kann nicht verwendet werden

Problem: Ich kann Required Attribut in asp.net vnext Klassenbibliothek Projekt nicht verwenden.

Fall:
1. Fügen Sie asp.net vnext Klassenbibliotheksprojekt mit Standardeinstellungen hinzu.
2. Erstellen Sie die Klasse Human mit der Zeichenfolgeneigenschaft Name.
3. Fügen Sie das Attribut Required dem Name hinzu. Kompilierungsfehler
4. Get:

Error CS0246 The type or namespace name 'Required' could not be found (are you missing a using directive or an assembly reference?) 

Unten ist mein project.json:

{ 
    "version": "1.0.0-*", 
    "dependencies": { 
     "System.ComponentModel.Annotations": "" 
    }, 
    "frameworks": { 
     "aspnet50": { 
     }, 
     "aspnetcore50": { 
      "dependencies": { 
       "System.Runtime": "" 
      } 
     } 
    } 
} 

Auch ich kann DataAnnotations in asp.net vNext verwenden, aber nicht in vNext Klassenbibliothek. Warum?

+1

Warum die down votes? Das scheint mir eine vernünftige Frage zu sein. –

+0

@ downvoter, gütig, den Grund auch zu posten. –

Antwort

5

Das vNext-Webprojekt hat eine Abhängigkeit von Microsoft.AspNet.Mvc. Dies zieht in einem großen Baum von Abhängigkeiten, sind die Daten Anmerkungen unter dem Paket Microsoft.DataAnnotations

eine Abhängigkeit für Microsoft.DataAnnotations hinzufügen die Datenvertrag verwenden Attribute.

In Ihrer project.json Dateiänderung mit dem, was

"dependencies": { 
    "System.ComponentModel.Annotations": "" 
}, 

zu

"dependencies": { 
    "Microsoft.DataAnnotations": "1.0.0-beta1" 
}, 

ersetzen 1.0.0-beta1 der aktuelle Versionsnummer ist. Visual Studio wird es automatisch für Sie vervollständigen.


Warum Microsoft.DataAnnotations Arbeit und nicht System.ComponentModel.Annotations?

Von einer kleinen Untersuchung System.ComponentModel.Annotations enthält zwei Ziele

  • aspnetcore50\System.ComponentModel.Annotations.dll
  • contract\System.ComponentModel.Annotations.dll

Die aspnetcore50 Montage ist für die neuen Core CLR. Es enthält das Required Attribut und funktioniert für die Core CLR.

Die Assembly contract enthält alle Typen, aber die Methoden sind leer. Es ist wie eine Dummy-Abhängigkeit, die das Framework erfüllen muss. Diese Dummy-Assembly wird in .NET 4.5 verwendet, weshalb Ihr Projekt, das sowohl .NET 4.5 als auch die Core CLR anvisiert, das Required-Attribut nicht finden kann.

Auf der anderen Seite hängt das Microsoft.DataAnnotations-Paket von System.ComponentModel.Annotations ab, verweist aber auch auf die Framework-Assembly System.ComponentModel.DataAnnotations, die die Typen tatsächlich bereitstellt, wenn Sie auf .NET 4 ausführen.5

Ich fand diesen Beitrag interessant. Es erklärt, was diese Vertragsversammlungen gegen Ende der Post sind. http://alxandr.me/2014/07/20/the-problems-with-portable-class-libraries-and-the-road-to-solving-them/

+0

Meine Frage ist, warum funktioniert es mit Microsoft.DataAnnotations und nicht System.ComponentModel.Annotations? –

+0

Vielen Dank. Ich werde es abends zu Hause versuchen (ich bin +3 GMT und habe nicht den VS 2015 bei der Arbeit). – colotiline

+1

Ok, ich habe die Antwort erweitert, um zu erklären, warum System.ComponentModel.Annotations noch nicht funktioniert. Microsoft.DataAnnotations tut das auch. –

Verwandte Themen