2015-02-23 16 views
5

Aktualizacja: Oczywiście próbowałem dodać using System.ComponentModel.DataAnnotations. To nie działa. Problem: Nie mogę użyć atrybutu w projekcie biblioteki klas klas asp.net.Nie można użyć wymaganego atrybutu w bibliotece klasy asp.net vnext

Przypadek:
1. Dodaj projekt biblioteki klasowej asp.net z domyślnymi ustawieniami.
2. Utwórz klasę Human z właściwością string Name.
3. Dodaj atrybut Required do Name.
4. Get błąd kompilacji:

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

Poniżej jest moje project.json:

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

Również mogę używać DataAnnotations w asp.net vnext, ale nie w vnext klasy biblioteki. Czemu?

+1

Dlaczego głosy na dół? wydaje mi się to rozsądnym pytaniem. –

+0

@downvoter, uprzejmie proszę, aby opublikować przyczynę również. –

Odpowiedz

5

Projekt internetowy vNext ma zależność od Microsoft.AspNet.Mvc. To ciągnie w wielkim drzewie zależności, adnotacje danych są w ramach pakietu Microsoft.DataAnnotations

Dodaj zależność dla Microsoft.DataAnnotations używać atrybuty kontraktu danych.

W swojej project.json modyfikacji pliku

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

do

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

Wymienić 1.0.0-beta1 z tym, co obecna wersja ma numer. Visual Studio automatycznie uzupełni to za Ciebie.


Dlaczego Microsoft.DataAnnotations pracy, a nie System.ComponentModel.Annotations?

Od małego dochodzenia System.ComponentModel.Annotations zawiera dwa cele

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

Zespół aspnetcore50 jest dla nowego rdzenia CLR. Zawiera atrybut Required i działa dla Core CLR.

Zestaw contract zawiera wszystkie typy, ale metody są puste. Jest to zależność od fikcji, którą musi spełnić framework. Ten zespół fikcyjny jest używany w .NET 4.5, dlatego Twój projekt kierowany zarówno na .NET 4.5, jak i na Core CLR nie może znaleźć atrybutu Required.

Z drugiej strony, pakiet Microsoft.DataAnnotations jest zależny od System.ComponentModel.Annotations, ale odnosi się także do zestawu ramowego System.ComponentModel.DataAnnotations, który faktycznie zapewnia typy podczas uruchamiania .NET 4.5

Ten post był dla mnie interesujący. Wyjaśnia, jakie są te umowy kontraktowe pod koniec postu. http://alxandr.me/2014/07/20/the-problems-with-portable-class-libraries-and-the-road-to-solving-them/

+0

Moje pytanie brzmi: dlaczego działa z Microsoft.DataAnnotations, a nie System.ComponentModel.Annotations? –

+0

Dziękuję bardzo. Spróbuję go wieczorem w domu (mam +3 GMT i nie mam VS 2015 w pracy). – colotiline

+1

Ok I rozwinął odpowiedź, aby wyjaśnić, dlaczego System.ComponentModel.Annotations nie działa jeszcze Microsoft.DataAnnotations robi. –

Powiązane problemy