2015-02-23 27 views
5

Güncelleştirme: Tabii using System.ComponentModel.DataAnnotations eklemeye çalıştım. Çalışmıyor.asp.net vnext sınıf kitaplığında gerekli özniteliği kullanamazsınız

Sorun: asp.net vnext sınıf kitaplığı projesinde Required özniteliğini kullanamıyorum.

Durum:
1. Varsayılan ayarlarla asp.net vnext sınıf kitaplığı projesini ekleyin.
2. Name numaralı dize özelliğine sahip Human sınıfını oluşturun.
3. Name'a Required özniteliği ekleyin.
4. alın derleme hatası:

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

Ayrıca ben asp.net vnext içinde DataAnnotations kullanmak değil, vnext sınıf kitaplığında olabilir:

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

Aşağıda benim project.json olduğunu. Niye ya?

+1

Neden aşağı oy? Bu benim için makul bir soru gibi görünüyor. –

+0

@downvoter, nedenini de göndermeye dikkat edin. –

cevap

5

vNext web projesinin Microsoft.AspNet.Mvc numaralı bağımlılığı vardır. Bu bağımlılıkları büyük ağaçta çeker, veri açıklamalar veri sözleşme özelliklerini kullanmasına olanak Microsoft.DataAnnotations için Bağımlılık ekle paketin Microsoft.DataAnnotations

altındadır. senin project.json dosya değişikliği

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

yılında

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

için geçerli sürüm numarası ne olursa olsun ile 1.0.0-beta1 değiştirin. Görsel stüdyo sizin için otomatik olarak tamamlayacaktır.


Neden Microsoft.DataAnnotations işi değil System.ComponentModel.Annotations yapar? Biraz soruşturma System.ComponentModel.Annotations itibaren

iki hedef

  • aspnetcore50\System.ComponentModel.Annotations.dll
  • contract\System.ComponentModel.Annotations.dll
  • aspnetcore50 montaj yeni Çekirdek CLR içindir

      içerir. Bu, Required özniteliğini içerir ve Çekirdek CLR için çalışır.

      contract derlemesi tüm türleri içerir, ancak yöntemler boştur. Çerçeve tarafından yerine getirilmesi gereken sahte bağımlılık gibi. Bu dummy derleme .NET 4.5 üzerinde kullanılır, bu nedenle hem .NET 4.5 hem de Core CLR'yi hedefleyen projeniz Required özniteliğini bulamıyor.

      Diğer taraftan Microsoft.DataAnnotations paketi System.ComponentModel.Annotations ürününe bağlıdır, ancak .NET 4'te çalıştırdığınızda aslında türlerini sağlayan çerçeve derlemesi System.ComponentModel.DataAnnotations'a da başvurur.Bu yazıyı ilginç buldum. Bu sözleşme meclislerinin, postanın sonuna doğru ne olduğunu açıklar. http://alxandr.me/2014/07/20/the-problems-with-portable-class-libraries-and-the-road-to-solving-them/

    +0

    Sorum, neden Microsoft.DataAnnotations ile çalışır ve System.ComponentModel.Annotations değil? –

    +0

    Çok teşekkür ederim. Ben evde akşamları deneyeceğim (Ben +3 GMT ve VS 2015 iş başında değilim). – colotiline

    +1

    Tamam System.ComponentModel.Annotations neden Microsoft.DataAnnotations neden çalışmıyor açıklamak için cevabı genişletti. –

    İlgili konular