Por que obtenho um ícone de aviso quando adiciono uma referência a um projeto de plug-in do MEF?

321

Desejo testar a classe principal de um plugin referenciando diretamente o projeto do plugin e instanciando a classe do plugin. Quando crio um projeto de aplicativo do Console App e adiciono uma referência ao projeto do plug-in, recebo um ícone de aviso (triângulo amarelo com ponto de exclamação) ao lado da referência na lista Referências.

Quando adiciono uma referência à dll, o assembly cria a saída do plug-in, não recebo esse aviso. O que esse aviso poderia estar tentando me dizer?

ProfK
fonte
8
Na maioria das vezes, os triângulos de aviso terão dicas de ferramentas ou (na sua falta) uma entrada na janela de erros. Em suma, os dois projetos têm dependências incompatíveis.
Damien_The_Unbeliever
2
Algum aviso no console ao tentar construir?
Jite
231
Eu vi isso com os projetos voltados para versões Framwork diferente .net
mhand
4
@OP você poderia selecionar a resposta de kad81 como a correta #
Andy
5
Isso sempre me pega. Adicionando um novo projeto a uma solução .NET 4 e o padrão é 4.5.
Robin French

Respostas:

674

Conforme mencionado nos comentários da pergunta, diferentes versões do .NET Framework entre os projetos podem causar isso. Verifique as propriedades do seu novo projeto para garantir que uma versão padrão diferente não esteja sendo usada.

kad81
fonte
13
O que eu também preciso saber é por que o visual studio aceitou adicionar essas referências?
Anders Lindén
16
Estou usando o VS 2015 e o problema ainda está lá. Perdi meia hora até chegar aqui.
Alisson
14
nem mesmo qualquer texto suspenso ou erros de construção explicando qual é o problema
matao
6
Pode confirmar que essa foi a raiz do problema. Também é possível confirmar que o Visual Studio 2017 com atualização 15.3 ainda não resolveu o problema de não mostrar realmente uma mensagem significativa. Muito irritante.
Greg R Taylor
4
@matao Concordou! Seu I chato não poderia obter quaisquer detalhes sobre o erro ...
nterry
74

Foi encontrado o mesmo problema com um ASP.Net Web App e dois projetos de classe de biblioteca que precisavam ser referenciados no Web App. Eu não tinha informações fornecidas sobre o motivo da falha na compilação e as referências eram inválidas.

A solução foi garantir que todos os projetos tivessem o mesmo Target Framework:

No Visual Studio 2015- Clique com o botão direito do mouse em projeto> Propriedades> Aplicativo> Target Framework

Salvar, limpar e reconstruir a solução. As referências do projeto não devem mais aparecer como avisos amarelos e a solução será compilada.

Meu Web App estava direcionado ao .Net 4.5, enquanto os outros dois projetos de classes de bibliotecas dependentes estavam direcionados ao .Net v4.5.2

kbarry
fonte
44

Para ambos (ou todos) os projetos que você deseja usar juntos:

Clique com o botão direito do mouse no projeto> Propriedades> Aplicativo> Estrutura .NET de Destino

Verifique se os projetos (ou todos) estão usando a mesma versão do .NET Framework.

user3578181
fonte
Perfeito, funcionou para mim! Eu tinha um projeto MVC com o .NET Framework 4.5.2. E minhas bibliotecas de classes que fazem referência a ele eram o .NET Framework 4.7.
21817 Mike Onjohn
Alguém poderia pensar que novos projetos adicionados a uma solução existente seriam inteligentes o suficiente para saber qual versão, mas infelizmente não é o caso.
317 Ron
39
  1. Verifique se todas as versões são iguais para cada projeto. Clique em cada projeto e veja a versão aqui Projeto> Propriedades> Aplicativo> Estrutura .NET de destino
  2. uma. Vá para Ferramentas> Gerenciador de Pacotes Nuget> Tipo de Console do Package Manager - Update-Package -Reinstall (se não estiver funcionando, vá para 2.b )

    b. ISSO É CRÍTICO, MAS A MAIOR POSSIBILIDADE QUE FUNCIONARÁ . Remova <Target> Talvez com várias linhas </ Target> normalmente encontradas na parte inferior do arquivo .csproj.

  3. Salve, carregue e construa a solução.

Aljohn Yamaro
fonte
1
Obrigado por isso, uma boa mensagem de erro no Visual Studio sobre as versões .Net não se desviaria aqui!
Colmde
1
@colmde curiosamente, se você limpar a solução, a janela de saída exibirá a seguinte mensagem: 'O pacote foi restaurado usando .NetFramework XXX em vez da estrutura de destino .NetFramework XXX. O pacote pode não ser totalmente compatível com o seu projeto '
elszeus
1
A parte 2.b, que não foi mencionada em outras respostas, foi crítica para mim! 2.b Remover <Destino> Talvez com várias linhas </ Destino> normalmente encontradas na parte inferior do arquivo .csproj.
Shelbypereira
1
Parte 2.b é completamente insana, mas funciona! obrigada
Elo
1
Obrigado 2.b fez o truque para mim também. NUNCA teria descoberto isso sozinho.
Henrik Clausen
23

Reinstale todos os pacotes em todos os projetos da solução atual:

Update-Package -Reinstall
Nitin Badole
fonte
2
Embora essa sugestão não tenha resolvido meu problema diretamente, ela me indicou a direção certa para o meu cenário. Para aqueles que podem ajudar, na verdade tive que alterar minha fonte de pacote NuGet para v3 para Update-Package para encontrar a versão correta para download: docs.nuget.org/consume/package-manager-dialog#package-sources
John Lee
1
Ele removeu todos os pacotes, instalou-os e os triângulos amarelos voltaram.
Anders Lindén
8

Verifique se você tem os projetos direcionados para a mesma versão da estrutura . Na maioria das vezes, o motivo seria que o projeto atual (em que você está adicionando referência a outro projeto) aponta para uma versão de estrutura .net diferente das demais .

user274294
fonte
5

Verifique o NETFramework da dll referida e o projeto em que você está adicionando a DLL. Ex: DLL ==> Versão do supportedRuntime = "v4.0" Projeto ==> Versão do SupportRuntime = "v3.0"

Você receberá um ícone de aviso. Solução: torne a versão da DLL consistente.

Sumit khare
fonte
5

Para mim, deparei-me com esse problema ao fazer referência a uma biblioteca de classes do .NET Standard 2.0 em um aplicativo de console do .NET Framework 4.7.1. Sim, as estruturas são diferentes, mas são compatíveis (o .NET Standard deve ser compatível com o .NET Core e o .NET Framework.) Tentei limpar, reconstruir, remover e ler a referência do projeto, etc ... sem sucesso . Por fim, sair do Visual Studio e reabrir resolveu o problema.

Justin
fonte
4

Faz muito tempo desde que essa pergunta foi feita, mas se alguém ainda estiver interessado - recentemente encontrei ícones semelhantes. Eu estava compilando um projeto C # .net usando o VS 2008. Descobri que o VS não conseguia localizar os assemblies para essas referências. Quando cliquei duas vezes no VS, atualizei as referências e removi os ícones em alguns deles [EDIT: que agora ele podia localizar]. Para as demais referências, tive que compilar os respectivos assemblies.

HappyTown
fonte
4

Adicionando meus 2 centavos à resposta @ kad81,

Vá para Visual Studio -> BUILD -> Configuration Manager

No menu suspenso "Active Solution Platform" no canto superior direito (o meu é o VS 2012), se for "Mixed Platforms", altere-o para a plataforma apropriada com base nos seus assemblies de referência de terceiros.

Em cada um dos projetos da lista, selecione a mesma plataforma para todo o projeto. (se x86 não existir, selecione "" e, em seguida, você pode selecionar "x86".)

Reconstrua os projetos da biblioteca primeiro e depois faça referência aos projetos. Espero que isto ajude.

JenonD
fonte
4

Tente fechar e abrir o VS.

Parece bobagem, mas depois de 1 hora seguindo as instruções acima e encontrando tudo alinhado, tudo bem. Reiniciei o VS 2017 e os problemas desapareceram.

Alex Stephens
fonte
1
Trabalhou para mim. Bobo ou não, às vezes, o Visual Studio fica confuso e seu cache é estragado. Obrigado por sugerir isso - odiava fazer isso porque eu senti pensamento estúpido ele iria trabalhar, mas o que o "diabo" - após uma hora de outras coisas que eu poderia muito bem e tada funcionou
Blake
2

Em algum momento no núcleo do Asp.net, ele mostra um alerta se você alterar o espaço ou o nome do projeto. Para remover esse tipo de alerta, basta descarregar o projeto e carregá-lo novamente. Se o problema persistir, significa que você não pode encontrar sua referência de montagem.

Tomcat0x4d2e47
fonte
1

Eu tinha esses ícones por um motivo diferente. Temos uma grande solução para todos os nossos projetos (quase 100). Fiz uma subseleção dos projetos nos quais me interessava e fiz uma nova solução. No entanto, as referências onde o projeto faz referência em vez de referências às dll compiladas ....

Após algumas pesquisas, encontrei este link no GitHub, que explica esse novo comportamento no VS2015.

Na página do GitHub, eles explicam uma solução alternativa para converter referências de projeto em referências binárias.

Martijn
fonte
1

Para consertar algumas coisas que não estão funcionando, faz sentido remover algumas bibliotecas às vezes, como isso não soaria estranho.

De qualquer forma, acredito que o problema é muito amplo e pode ser causado por diferentes fatores , por isso, quero compartilhar minha situação / solução.

Eu tive um projeto (trazido pelo cliente) com as bibliotecas Xamarin Forms e Telerik. Em geral, a coisa estava relacionada aos componentes, cujas bibliotecas não estão incluídas na pasta packages nem disponíveis via Nuget (pagas).

Todo o projeto As referências eram "amarelas", pareciam horríveis e assustadoras.

A solução foi apenas remover essas referências da Telerik (incluindo alguns controles no código que estavam usando isso). Logo depois disso, todas as referências obtiveram magicamente sua cor cinza normal e os erros (principalmente) desapareceram.

"Principalmente" - porque mensagens de erro "todo vermelho" sobre "o elemento não está definido em nenhum lugar" às vezes acontecem ainda. Isso é estranho e traz inconveniência, mas ainda consigo compilar e executar o (s) projeto (s): só preciso limpar a solução, reiniciar o Visual Studio, orar um pouco, limpar novamente, remover as pastas obj / bin, reiniciar novamente e funciona bem.

O principal é remover as referências de bibliotecas não disponíveis , pois as mensagens de erro dizem absolutamente outras coisas. (Por exemplo, algo como "Xamarin.Build.Download.XamarinDownloadArchives não encontrou ou não consegue encontrar algo" etc. etc., mas isso pode significar que você não tem algumas referências disponíveis.

Em seguida, remova a pasta packages, recarregue / reabra o projeto / solução, vá para "Gerenciar pacotes Nuget" e clique no botão "Restaurar".

Agat
fonte
1

Usando o Visual Studio 2019 com todos os projetos direcionados ao .Net Core 3.1, a solução foi:

  1. Limpe / Construa / Reconstrua.
  2. Reinicie o Visual Studio 2019
Riaan van Zyl
fonte
0

Eu também enfrentei o mesmo problema, mas meu caso foi um pouco diferente dos anteriores. Tentei abrir um projeto criado em um computador diferente. Descobri que o caminho para a pasta do pacote não é atualizado quando você adiciona uma referência; portanto, reiniciar o VS, alterar a versão do .NET ou qualquer recomendação mencionada não resolve o problema. Abri o arquivo csproj no bloco de notas ++ e corrigi todos os caminhos relativos à pasta packages. Então; todos os avisos se foram. Espero que ajude.

todos
fonte
0

no VS 2017 Faça uma limpeza e depois compile

user1684037
fonte
0

Obrigado a todos pela ajuda. Aqui está um detalhamento de como eu corrigi o meu problema:

Clique com o botão direito do mouse em seu projeto> Propriedades

Em Aplicativo, altere a Estrutura de destino. No meu caso, o ImageSharp estava usando o .Net 4.6.1. Você pode encontrar isso em packages.config.

Vá para as referências do seu projeto. Você notará que o SixLabors tem um triângulo amarelo. Você precisa atualizar o pacote NuGet.

Clique com o botão direito do mouse em Referências> Gerenciar pacotes NuGet.

Atualize o SixLabors.

Você pode ter pequenas atualizações de código (veja abaixo), mas isso corrigiu o meu problema.

Converter ImageSharp.Image em ImageSharp.PixelFormats.Rgba32?

Phoenix Wright
fonte
0

No Visual Studio 2019, um dos meus projetos de estrutura de destino era o núcleo .net, mas fazia referência a outro projeto cuja estrutura de destino era o padrão .net. Alterei todos os projetos para fazer referência ao padrão .net e os ícones foram embora. Para ver qual é o seu projeto, clique com o botão direito do mouse e, em seguida, clique em Propriedades. Você também pode clicar normalmente no projeto em si e olhar para a tag <TargetFramework> em <PropertyGroup>

abovetempo
fonte
0

Em uma solução de vários projetos, se tudo falhar ... No projeto de inicialização, verifique. Dependências-> Montagens e veja se o projeto referenciado incorreto está lá. Remova e reconstrua.

Babatunde Ahmed
fonte