Espaço para nome não reconhecido (mesmo que esteja lá)

145

Estou recebendo este erro:

Não foi possível encontrar o tipo ou nome do namespace 'AutoMapper' (está faltando uma diretiva de uso ou uma referência de montagem?)

O engraçado é que eu já tenho essa referência no meu projeto:

ProjectThatFails

E este é o meu código:

using System.Collections.Generic;
using DataContract;
using SelectorDAL;
using AutoMapper;

namespace SpecimenSelect
{
    public class SpecimenSelect : ISpecimenSelect
    {
        public SpecimenSelect()
        {
            SetupMaps();
        }

        private static void SetupMaps()
        {
            Mapper.CreateMap<SpecimenDetail, SpecimenDetailContract>();
        }

A outra coisa estranha é que tenho dois outros projetos em minha solução que usam o AutoMapper e fazem referência exatamente ao mesmo arquivo do AutoMapper.dll. Ambos funcionam perfeitamente bem.

Aqui está uma captura de tela de um:

ProjectThatWorks

e aqui está esse código (que compila bem):

using System.Collections.Generic;
using AutoMapper;
using DataContract;
using SelectorDAL;

namespace PatientSelect
{

    public class PatientSelect : IPatientSelect
    {
        public PatientSelect()
        {
            SetupMaps();
        }

        private void SetupMaps()
        {
            Mapper.CreateMap<Patient, PatientContract>();
            Mapper.CreateMap<OrderedTest, OrderedTestsContract>();
            Mapper.CreateMap<Gender, GenderContract>();
        }

Ambas as referências parecem ter os mesmos dados na página de propriedades.

o que estou perdendo?

Eu tentei:

  1. Reiniciando o Visual Studio
  2. Referenciando sem uma declaração using (ie AutoMapper.Mapper.CreateMap)
  3. Limpar e reconstruir

Alguma outra ideia?

Vaccano
fonte
1
O caminho de referência está incorreto? Talvez tenha sido adicionado com um caminho absoluto, mas a DLL já foi movida?
Kevingessner

Respostas:

259

Verifique se o seu projeto não está configurado para usar o .NET Framework 4 Client Profile.

Você pode verificar / alterar isso clicando com o botão direito do mouse em seu projeto (não na solução), selecione Propriedades -> Aplicativo -> Estrutura de destino . A estrutura de destino é uma lista suspensa nessa página.

Esse é um problema no Visual Studio (eu chegaria ao ponto de chamá-lo de bug). O AutoMapper requer assemblies excluídos do .NET Framework 4 Client Profile. Como seu projeto está usando essa versão da estrutura, ele quebra.

Um erro semelhante será propagado para o processo de criação quando a versão do .NET Framework para o projeto que você está referenciando for superior ao projeto que está fazendo a referência. ou seja, um projeto direcionado ao 4.5 que referencie um projeto direcionado ao 4.5.1 fornecerá o mesmo erro.

É necessário que exista uma mensagem de erro melhor quando isso acontece, porque não há uma explicação racional para o motivo de ela não ter sido criada, pois a mensagem de erro diz para você fazer referência a uma montagem que você claramente referenciou.

Andrew Hare
fonte
7
Era exatamente esse o problema! Te agradece! Concordo que este erro é muito enganador. Também não entendo por que o perfil do cliente é o padrão para um novo projeto. A maioria dos computadores possui a estrutura .net completa, certo? (Ou a Microsoft apenas coloca a estrutura do cliente no Windows Update?) De qualquer forma, todos os computadores para os quais desenvolvo terão a estrutura completa. Eu gostaria que houvesse uma maneira de alterar o padrão para um novo projeto, para que ele me morda assim. De qualquer forma. Obrigado novamente! Eu estava preso e não pensei em olhar para lá.
Vaccano
Eu tive exatamente o mesmo problema! Os tipos não foram reconhecidos no meu projeto de serviço do Windows, mesmo se eu tivesse adicionado as referências corretamente. Alterei a estrutura de destino do .NET Framework 4 Client Profile para o .NET Framework 4. Observe que eu também precisei adicionar novamente minhas referências para compilar. Parece ser um problema no Visual Studio 2010. Obrigado e saudações de Budapeste.
Varga Tamas #
Bom, isso também aconteceu comigo. Meu projeto de teste não reconheceu os namespaces referenciados, mesmo estando lá. Isso ocorreu porque mudei minha biblioteca para a plataforma .NET 4.5, mas o projeto de teste permaneceu como 4.0. De qualquer forma, sua resposta me levou ao caminho certo. Obrigado, por descobrir isso.
Jukka Puranen
Eu enfrentei o mesmo problema quando tentei usar o conjunto .Net 2.0 no projeto de perfil de cliente .Net 3.5. e mudar para o perfil completo 3.5 resolve o problema.
Palani 13/06
Meu problema foi semelhante. Os projetos estavam usando diferentes versões do Framework. O projeto principal estava usando o 4.5 e o projeto recém-criado estava usando o 4.5.1. Seria bom se a mensagem de erro fosse melhor.
L_7337 12/12/2015
27

Deixe-me fazer uma pergunta estúpida: poderia haver dois arquivos automapper.dll ? Um com um AutoMapperespaço para nome e outro sem? Confirme os caminhos nos dois projetos.

Notei também que a ordem dos usingcomandos é diferente. Não deveria importar, mas você tentou embaralhá-los?

n8wrl
fonte
18

Se sua classe não compilar, mesmo se estiver no projeto, verifique estes:

  1. se o nome da classe é exatamente o mesmo
  2. se o espaço para nome é exatamente o mesmo
  3. se as propriedades da classe mostram build action = compile
Anônimo
fonte
6
Copiei um arquivo .cs com o Explorer e o incluí no projeto. O VS.Net definiu a ação de compilação como "Conteúdo" em vez de "Compilar" e, portanto, não estava reconhecendo o espaço para nome. Boa pegada!
AUSteve
1
Eu adicionei a classe através do recurso Adicionar -> Classe, e ele definiu a ação de compilação como conteúdo. Apenas curioso sobre o porquê? Isso me ajudou de qualquer maneira, algo tão simples, mas nunca antes encontrado. É por isso que eu nem me incomodei em olhar para lá e pesquisei no Google.
Anomaly
14

Essa deve ser a solução mais simples se todas as outras respostas não ajudarem você.

Eu estava pesquisando o que havia de errado com minha configuração entre as respostas, tentei todas elas - nenhuma funcionou e então percebi que o Visual Studio 2018 foi desenvolvido pela Microsoft . Então eu fiz o que a maioria das pessoas faz,

Reiniciou o Visual Studio e funcionou

insone
fonte
Funcionou para mim, mas excluiu a pasta bin e obj antes de reiniciar.
Chandan YS
Em todos os meus anos no stackoverflow, essa é a melhor resposta salgada para um bug (que realmente fornece uma solução) e funcionou na primeira reinicialização. ftw insomniac!
Collin White
12

Resolvi esse problema clicando com o botão direito do mouse na pasta que continha os arquivos e escolhendo Excluir do projeto e, em seguida, clicando com o botão direito do mouse novamente e selecionando Incluir no projeto (primeiro é necessário ativar Mostrar todos os arquivos para tornar visível a pasta excluída)

user3251328
fonte
Eu tive esse erro em vários arquivos, basta remover um e incluí-lo novamente, resolvendo o problema de toda a solução.
Daryl
Clicar com o botão direito do mouse em quê? "Excluir do projeto" remove a pasta do Solution Explorer. Não há "Incluir no Projeto"
Florian Winter
2
@FlorianWinter Para clicar com o botão direito do mouse na pasta excluída, você precisa ativar a opção Mostrar Todos os Arquivos . Isso pode ser ativado através do Solution Explorer, localizado ao lado do botão Recolher tudo .
user3251328
Não sei por que, mas isso funcionou no VS2019 quando adicionei um novo arquivo contendo uma nova classe a um projeto, mas não foi possível criar uma nova instância dessa classe em outro projeto que já tinha uma referência ao projeto que continha a nova classe. .. #¯\_(ツ)_/¯
30819 matt.fc
7

Eu tenho um problema semelhante com as referências não sendo reconhecidas no VS2010 e as respostas aqui não foram capazes de corrigi-lo.

O problema na minha solução estava relacionado à extensão do caminho em que o projeto referenciado estava localizado. Enquanto trabalho com o SVN, criei uma ramificação de um repositório para fazer alguns testes e essa ramificação aumentou dois níveis na estrutura do caminho, portanto, o caminho ficou muito longo para ser usado no Windows. Isso não gerou nenhum erro, mas não reconheceu o espaço para nome da referência do projeto. Quando corrijo a localização do projeto para ter um caminho menor, tudo correu bem.

onurb84
fonte
2
Esse também era um problema para nós e era o comprimento do caminho que estava causando o problema. O VS precisa fazer um trabalho melhor para fornecer um erro melhor nesse caso, pois o erro que recebemos foi bastante enganador.
VoodooChild
Graças à sua resposta, uma ideia me veio à mente. Examinei o caminho do meu projeto e percebi que a pasta raiz, a criada pela árvore de origem, tinha "% 20" em vez de _ no nome. Eu mudei para _ e tudo funciona bem agora.
Fernando Wolff
5

No meu caso, a dll referenciada foi criada na versão superior do .Net Framework. Depois de adicionar a referência, eu poderia usá-la. Mas assim que eu fiz uma compilação, o erro 'referência ausente' será exibido. Eu atualizo a dll, o erro continuará, mas ele nunca criaria. Este post me fez verificar a versão do framework e, portanto, eu poderia resolvê-lo criando o projeto referenciado na mesma versão.

Ankur-m
fonte
3

Talvez a tabela de tipos do projeto esteja em um estado incorreto. Eu tentaria remover / adicionar a referência e, se isso não funcionasse, criar outro projeto, importar meu código e ver se isso funcionaria.

Eu me deparei com isso enquanto usava o VS 2005, mas seria de esperar que a MS tivesse corrigido esse problema em particular agora.

Dave
fonte
você pode corrigir esse problema?
Fran_gg7
3

A pergunta já foi concedida, mas há detalhes adicionais ainda não descritos que precisam ser verificados.

Eu também estava tendo esse comportamento, onde o projeto B foi referenciado no projeto A, mas o espaço para nome do projeto B não foi reconhecido no projeto A. Depois de algumas escavações, descobri que meu caminho era muito longo. Ao reduzir o caminho dos projetos (A e B), as referências se tornaram visíveis e disponíveis.

Testei essa teoria criando o projeto C com uma profundidade de caminho muito menor. Referenciei o projeto C no projeto A. As referências funcionaram corretamente conforme o esperado. Em seguida, removi o projeto C da solução, apenas mudei o projeto C para um caminho mais profundo, igual ao projeto B, adicionei o projeto C de volta à solução e tentei compilar. Eu não tinha mais visibilidade para projetar objetos C.

barrypicker
fonte
2

No meu caso, eu copiei uma biblioteca de classes e não alterei o "Nome do assembly" nas propriedades do projeto, portanto uma DLL estava substituindo a outra ...

Fernando Meneses Gomes
fonte
2

Isso aconteceu comigo no Visual Studio 2019. Para mim, eu estava tentando fazer referência a outro projeto na minha solução. Aqui estão as etapas que eu tomei para ajudar outras pessoas:

  1. Assegurou que o projeto que eu queria referenciar estivesse listado em Referências
  2. Garantiu que ambos os projetos usassem a versão correta do .NET Framework
  3. Construiu o projeto (clique na seta verde "Iniciar")

Fiquei confuso porque ainda estava recebendo o erro após as etapas 1 e 2, mas a criação do projeto pareceu resolvê-lo.

mtfalcon31
fonte
1

Eu enfrentei um problema semelhante de o namespace / método não ser encontrado durante a execução, embora tenha sido bom durante a compilação, e o motivo disso parece ser que o assembly que eu estava referenciando foi implantado no GAC e, desde então, foi alterado, por isso, quando referenciei o assembly no Visual Studion, ele usava o mais recente, mas durante o tempo de execução, a versão do GAC havia sido usada.

Pavel Tsybulivskyi
fonte
1

No meu caso, obtive o erro apenas no VS 2015. Ao abrir o projeto no VS 2017, o erro desapareceu.

daniel
fonte
1

Louco. Eu sei.

Tentei todas as opções aqui. Reiniciando, limpando, verificando manualmente as DLLs geradas (isso é inestimável para entender se é realmente você quem fez essa bagunça).

Consegui fazê-lo, definindo a verbosidade do MSBuild como "Detalhado" em Opções.

Program.X
fonte
para mim, era uma configuração de compilação definida como AnyCpu no PlatformTarget quando o Nome da configuração era x86. Essa configuração me ajudou a descobrir.
Dbl
1

Esta pergunta já foi respondida para o pôster original, mas caso alguém o encontre em um projeto do MS-Test:

no Visual Studio, clique no menu Teste -> Configurações de teste -> Arquitetura padrão do processador e verifique se a arquitetura corresponde à da outra montagem que você está referenciando. Se o outro conjunto for x64 e as configurações de teste forem x86, os sintomas que o pôster original apresentava.

S. Hooley
fonte
0

Eu estava trabalhando no projeto Xamarin e, como sempre, a exclusão da pasta obj e a reconstrução resolveram meu problema, o espaço para nome que meu VS não estava reconhecendo era um código no meu próprio projeto BTW

mohas
fonte
0

No meu caso, remover / adicionar essa montagem funcionou.

sheikh sabeer
fonte
0

Eu tive um problema semelhante, que demorou um pouco para solucionar, então pensei em compartilhá-lo:

O espaço para nome que não pôde ser resolvido no meu caso foi Company.Project.Common.Models.EF . Eu adicionei um arquivo em um novo espaço para nome Company.Project.BusinessLogic.Common .

A maioria dos arquivos estava tendo um

using Company.Project;

E, em seguida, referenciando os modelos como Common.Models.EF . Todos os arquivos que também tinham um

using Company.Project.BusinessLogic;

Estavam com falha porque o VS não pôde determinar qual namespace usar.

A solução foi alterar o segundo espaço para nome para Company.Project.BusinessLogic.CommonServices

MaPi
fonte
-1

Reiniciando o Visual Studio 2019 - foi o que fez.

Jeff Woehler
fonte
Vaccano escreveu: Tentei: Reiniciando o Visual Studio
Woworks