Por que não posso fazer referência a System.ComponentModel.DataAnnotations?

97

Estou tentando usar DataAnnotations em meu projeto WPF para especificar um comprimento máximo de strings, com o seguinte:

using System.ComponentModel.DataAnnotations;

No entanto, recebo o erro

O tipo ou nome do namespace 'DataAnnotations' não existe no namespace 'System.ComponentModel' (está faltando uma referência de assembly?)

Eu vi outros exemplos onde DataAnnotations não existem neste namespace. Estou usando C # 4. Existe alguma razão pela qual eu não posso usar isso? O que posso fazer para corrigir isso?

DaveDev
fonte
Você instalou o MVC? Acredito que DataAnnotations pertence a esse pacote
dougajmcdonald
3
Talvez você esteja "perdendo uma referência de montagem".
phoog de
1
As mensagens de erro são projetadas para serem úteis, não para serem ignoradas.
Kendall Frey
6
Ok pessoal, desculpem-me por parecer ignorante, mas estou referenciando a montagem System.ComponentModele utilizando vários outros componentes nela. De acordo com @Hari abaixo, parece que DataAnnotationsexiste em sua própria montagem. Achei que existiria dentro System.ComponentModel, pois está no mesmo namespace.
DaveDev

Respostas:

156

Você tem que fazer referência ao assembly no qual este namespace está definido (ele não é referenciado por padrão nos modelos do Visual Studio). Abra seu gerenciador de referência e adicione uma referência ao conjunto System.ComponentModel.DataAnnotations (explorador de soluções -> Adicionar referência -> Selecione a guia .Net -> selecione System.ComponentModel.DataAnnotations da lista)

Hari
fonte
10
O que é estranho aqui é que o VS não foi capaz de me dar a 'Correção Potencial' normal para este. Me pergunto por que ...
Todd Vance
No VS2019, a guia .net não está mais lá (mais). Verifique a resposta mais recente de JohnB que está funcionando para mim!
peter.cyc
18

Se estiver usando .NET Core ou .NET Standard

usar:

Gerenciar pacotes NuGet ..

Use Gerenciar Pacotes NuGet

ao invés de:

Adicionar Referência ...

Não use Adicionar Referência

JohnB
fonte
5
Na linha de comandodotnet add package System.ComponentModel.Annotations
Eric
também através da instalação do gerenciador de pacotes nuget no VSCode, - -> seguido do comando "command + shift + p" (no mac) - -> e digitando "gerenciador de pacotes Nuget" e selecionando "adicionar pacote" na lista preenchida automaticamente - - > e digitando System .. e aguardando o autocomplete para mostrar o pacote correto e selecionando "System.ComponentModel.Annotations" - -> e selecionando o projeto onde este conjunto precisa ser incluído - -> e selecionando "restore" se necessário para estabelecer a referência.
supi
13

Para fazer referência a System.ComponentModel.DataAnnotations

Em um arquivo de código para ter Using System.ComponentModel.DataAnnotations; na parte superior do arquivo, como:

using System.ComponentModel.DataAnnotations;

Adicione uma referência .NET ao seu projeto clicando com o botão direito do mouse no projeto no explorador de soluções:

insira a descrição da imagem aqui

Espero que isto ajude! Essa pergunta me ajudou.

Catto
fonte
8

Se você não o tiver nas referências (como eu não tinha), você também pode adicionar o NuGet System.ComponentModel.Annotations para obter os assemblies e resolver os erros. (Adicionando-o aqui como esta resposta ainda no topo do Google para o erro)

Rodger
fonte
4

Eu também tive o mesmo problema e resolvi adicionando a referência em um dos meus projetos que não tinha a referência mencionada. Se você tiver 2 a 3 projetos em sua solução, verifique adicionando essa referência aos outros projetos.

Ashish Sahu
fonte
2

Use o FrameWork versão 4.5 e superior para o seu projeto e o problema será resolvido. Porque este namespace está abaixo de 4.5 e superior.

user2090762
fonte
1
isso está incorreto. veja aqui
itsho
Estou usando o .NET 4.5.xe não está incluído. Mas então eu não estou usando MVC. Este é um aplicativo de console sem IU que será executado como um cron job uma vez por dia. Só quero usar DataAnnotations nas classes que representam os membros de dados que conterão os dados das colunas que recupero de cada linha da tabela do SQL Server. Vou tentar adicioná-lo manualmente como referência.
MiddleAgedMutantNinjaProgrammer
Dê uma olhada nisso; aqui
user2090762
@ user2090762: o namespace existe, mas ainda não existem todas as classes. Em particular, o EmailAddressAttribute não está disponível até 4.5.
jmoreno
2

Descobri que não posso fazer referência a System.ComponentModel.DataAnnotations do Silverlight 5 com a versão abaixo em (1). Descobri que os assemblies do Silverlight 5 não podem usar assemblies do .NET, ele apresenta o erro "Você não pode adicionar uma referência a System.ComponentModel.DataAnnotations, pois não foi criado para o tempo de execução do Silverlight. ..." Eu pretendo contornar isso por esperançosamente instalando o pacote Silverlight 5 encontrado em (2) abaixo. Se isso falhar, irei atualizar este post.

[ATUALIZAÇÃO: falhou. Instalei tudo relacionado ao Silverlight 5 e não tenho a versão Silverlight do assembly .dll System.ComponentModel.DataAnnotations. Que pena. ATUALIZAÇÃO II: encontrei um .dll antigo com este nome de uma instalação anterior do kit de desenvolvedor do Silverlight para Visual Studio 2008 ou 2010. Eu adicionei este arquivo e parece 'funcionar', pois o IntelliSense agora está reconhecendo atributos em membros da classe, como [Display(Name = "My Property Name")]. Se isso funciona ou não para tudo o mais neste .dll, não sei.]

(1)

Microsoft Visual Studio Professional 2013
Version 12.0.21005.1 REL
Microsoft .NET Framework
Version 4.5.51641

Versão Instalada: Profissional

(2) http://go.microsoft.com/fwlink/?LinkId=229318

PaulDecember
fonte
Atualização III - Não consegui fazer o System.ComponentModel.DataAnnotations.dll funcionar no lado do cliente, para Silverlight 5, mas estranhamente no lado do servidor, o projeto do Silverlight usa a versão .NET v4.5.1 deste .dll perfeitamente. Mas o lado do cliente não aceita a versão .NET e exige uma versão Silverlight deste .dll, que até esta data não consigo encontrar em lugar nenhum. Portanto, você deve fazer sem do lado do cliente.
PaulDezembro,
1

Procurei ajuda neste tópico quando me deparei com o mesmo problema.

Embora o seguinte possa não ser a resposta à pergunta feita originalmente em 2012, pode ser uma solução para aqueles que se deparam com este tópico.

Uma maneira de resolver isso é verificar onde seu projeto está dentro da solução. Acontece que para minha instância (eu estava tentando instalar um pacote NuGet, mas não o fez e o erro listado apareceu) que meu arquivo de projeto não foi incluído no diretório de solução, embora aparecesse no explorador de solução. Excluí o projeto do diretório fora do escopo e adicionei novamente o projeto, mas desta vez no local correto.

Guybrush Threepwood
fonte
0
This error occurs when the reference to the "System.dll" got removed.Solution to the problem is very simple add the reference to "System.dll".The dll is normally available in the following location
"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727" .Add the reference your problem will get solved .
Ankit Agrawal
fonte
0

Se você tentou atualizar o Visual Studio de vs2008 para vs2010. E seu aplicativo usa framework 3.5 (e você não quer atualizá-lo), e também usou WCF RIA Services BETA ... Tenho más notícias ... você DEVE atualizar para WCF RIA Services v1 (BETA não funciona no vs2010 ) ... e devido a isso ... você também deve instalar o Silverlight 4 + upgrade para o framework 4.0

Veja: http://blog.nappisite.com/2010/05/updating-visual-studio-2008net-35-ria.html

Fernando Torres
fonte
0

Eu atualizei do Silverlight 4 para o Silverlight 5 e então eu estava tendo esse problema. Embora eu tivesse uma referência a "System.ComponentModel.DataAnnotations" em "Referências" em meu projeto, havia um sinal de rendimento amarelo que indicava que o assembly referenciado anteriormente não foi encontrado. Descobri que as propriedades da referência "System.ComponentModel.DataAnnotations" indicavam "Versão Específica = Verdadeira", quando alterei para "Versão Específica = Falso", o problema foi corrigido. Clique com o botão direito no assembly "System.ComponentModel.DataAnnotations" em "Referências" e selecione "Propriedades" no menu de contexto. Verifique se o valor da propriedade para "Versão específica = False".

Deve ter feito referência ao antigo conjunto do Silverlight 4, que não estava mais disponível após a atualização para o Silverlight 5.

césio
fonte
0

System.ComponentModel.DataAnnotations está contido em seu próprio assembly, portanto, você precisa ter certeza de tê-lo referenciado. Simplesmente:

1). Clique com o botão direito em Solução e escolha adicionar.

2). Escolha a referência na lista.

3). Pesquise "System.ComponentModel.DataAnnotation", marque a caixa de seleção à esquerda e pressione ok.

Trabalho concluído, não deve haver erros de referência.

O que você precisa de mim
fonte
0

Eu também tenho esse problema. Isso é muito estúpido quando adiciono um namespace igual ao System. Tento remover todas as referências, mas não foi resolvido. Eu uso "global :: System.ComponentModel", está funcionando também. Quando removo meu namespace, esse problema foi resolvido.

Henry
fonte
-6

Tive o mesmo problema, resolvi esse problema da seguinte forma.

Clique com o botão direito na página e selecione Propriedade. na ação de construção, selecione Conteúdo.

Espero que esta solução possa ajudá-lo.

Pankil Agrawal
fonte
A qual "página" você está se referindo? E como isso ajuda exatamente?
Crono
1
Bem, isso está realmente errado. Se você fizer com que um elemento do projeto seja tratado como "Conteúdo" durante a construção, ele perderá seu comportamento. Portanto, se você fizer isso em uma classe, ela não será mais compilada e seu código nunca será chamado. Em vez disso, ele será copiado como um arquivo junto com os binários da saída de compilação do programa. É por isso que você deixará de receber erros de compilação, mas definitivamente não é uma solução para um problema de compilação.
Ivaylo Slavov