¿Por qué aparece un icono de advertencia cuando agrego una referencia a un proyecto de complemento MEF?

321

Deseo probar la clase principal de un complemento haciendo referencia directa al proyecto del complemento e instanciando la clase del complemento. Cuando creo un proyecto de prueba de la aplicación de consola y agrego una referencia de proyecto al proyecto del complemento, aparece un icono de advertencia (triángulo amarillo con signo de exclamación) junto a la referencia en la lista de referencias.

Cuando agrego una referencia a la dll, la salida de compilación del ensamblaje del complemento, no recibo tal advertencia. ¿Qué podría estar tratando de decirme esta advertencia?

ProfK
fuente
8
La mayoría de las veces, los triángulos de advertencia tendrán información sobre herramientas o (en su defecto) una entrada en la ventana de errores. Supongo que los dos proyectos tienen dependencias incompatibles.
Damien_The_Unbeliever
2
¿Alguna advertencia en la consola al intentar construir?
Jite
231
He visto esto con los proyectos dirigidos a diferentes versiones de .net framwork
mhand
44
@OP, ¿podría seleccionar la respuesta de kad81 como la correcta
Andy
55
Esto siempre me atrapa. Agregar un nuevo proyecto a una solución .NET 4 y el valor predeterminado es 4.5.
Robin French el

Respuestas:

674

Como se menciona en los comentarios de la pregunta, las diferentes versiones de .NET Framework entre los proyectos pueden causar esto. Verifique las propiedades de su nuevo proyecto para asegurarse de que no se esté utilizando una versión predeterminada diferente.

kad81
fuente
13
Lo que también necesito saber es por qué Visual Studio aceptó agregar esas referencias.
Anders Lindén
16
Estoy usando VS 2015 y el problema sigue ahí. Perdí media hora hasta que vine aquí.
Alisson
14
Ni siquiera cualquier texto vuelo estacionario o errores de generación explicando cuál es el problema
matao
66
Puede confirmar que esta fue la raíz del problema. También puede confirmar que Visual Studio 2017 con la actualización 15.3 aún no ha abordado el problema de no mostrar realmente un mensaje significativo. Muy molesto.
Greg R Taylor
44
@matao De acuerdo! Es molesto, no pude obtener ningún detalle sobre el error ...
nterry
74

Encontré el mismo problema con una aplicación web ASP.Net y dos proyectos de clase de biblioteca que debían mencionarse dentro de la aplicación web. No tenía información sobre por qué falló la compilación y las referencias no eran válidas.

La solución fue asegurar que todos los proyectos tuvieran el mismo Marco Objetivo:

En Visual Studio 2015: proyecto de clic derecho> Propiedades> Aplicación> Marco de destino

Ahorre, limpie y reconstruya la solución. Las referencias del proyecto ya no deberían aparecer como advertencias amarillas y la solución se compilará.

Mi aplicación web apuntaba a .Net 4.5, mientras que los otros dos proyectos de clase de biblioteca dependiente apuntaban a .Net v4.5.2

kbarry
fuente
44

Para ambos (o todos) los proyectos que desea usar juntos:

Haga clic derecho en el proyecto> Propiedades> Aplicación> Framework .NET de destino

Asegúrese de que ambos (o todos) sus proyectos estén utilizando la misma versión de .NET Framework.

usuario3578181
fuente
Perfecto, funcionó para mí! Tuve un proyecto MVC con .NET Framework 4.5.2. Y mis bibliotecas de clase que hacen referencia a él eran .NET Framework 4.7.
Mike Upjohn
Uno pensaría que los nuevos proyectos agregados a una solución existente serían lo suficientemente inteligentes como para saber qué versión, pero lamentablemente no es el caso.
Ron
39
  1. Asegúrese de que todas las versiones sean iguales para cada proyecto, haga clic en cada proyecto y vea la versión aquí Proyecto> Propiedades> Aplicación> Marco .NET de destino

  2. a. Vaya a Herramientas> Nuget Package Manager> Package Manager Console Type Update-Package -Reinstall (si no funciona, continúe con 2.b )

    si. ESTO ES CRÍTICO PERO LA MAYOR POSIBILIDAD QUE FUNCIONARÁ . Elimine <Target> Quizás con varias líneas </ Target> que generalmente se encuentran en la parte inferior de .csproj.

  3. Guarde, cargue y cree la solución.

Aljohn Yamaro
fuente
1
¡Gracias por eso, un buen mensaje de error en Visual Studio sobre las versiones .Net no se perdería aquí!
colmde
1
@colmde es interesante si limpia la solución, la ventana de salida muestra el siguiente mensaje: 'El paquete se restauró usando .NetFramework XXX en lugar del marco de destino .NetFramework XXX. El paquete puede no ser totalmente compatible con su proyecto '
elszeus
1
¡La parte 2.b que no se observó en otras respuestas fue crítica para mí! 2.b Elimine <Target> Quizás con varias líneas </ Target> que generalmente se encuentran en la parte inferior de .csproj.
shelbypereira
1
¡La parte 2.b es completamente loca pero funciona! gracias
Elo
1
Gracias 2.b hizo el truco para mí también. NUNCA habría resuelto esto yo mismo.
Henrik Clausen
23

Vuelva a instalar todos los paquetes en todos los proyectos de la solución actual:

Update-Package -Reinstall
Nitin Badole
fuente
2
Aunque esta sugerencia no resolvió directamente mi problema, me señaló en la dirección correcta para mi escenario. Para aquellos que pueden ayudar, en realidad tuve que cambiar la fuente de mi paquete NuGet a v3 para Update-Package para encontrar la versión correcta para descargar: docs.nuget.org/consume/package-manager-dialog#package-sources
John Lee
1
Quitó todos los paquetes, los instaló y volvieron los triángulos amarillos.
Anders Lindén
8

Asegúrese de tener los proyectos destinados a la misma versión de marco . La mayoría de las veces la razón sería que el proyecto actual (donde está agregando referencias de otro proyecto) apunta a una versión de .NET Framework diferente a las demás .

usuario274294
fuente
5

Verifique el NETFramework del dll referido y el Proyecto donde está agregando la DLL. Ej: DLL ==> SupportRuntime version = "v4.0" Proyecto ==> SupportRuntime version = "v3.0"

Obtendrá el icono de advertencia. Solución: haga que la versión dll sea consistente.

Sumit khare
fuente
5

Para mí, me encontré con este problema al hacer referencia a una biblioteca de clases .NET Standard 2.0 en una aplicación de consola .NET Framework 4.7.1. Sí, los marcos son diferentes, pero son compatibles (se supone que .NET Standard debe coincidir con .NET Core y .NET Framework). Intenté limpiar, reconstruir, eliminar y leer la referencia del proyecto, etc. sin éxito. . Finalmente, salir de Visual Studio y volver a abrir resolvió el problema.

Justin
fuente
4

Ha pasado mucho tiempo desde que se hizo esta pregunta, pero si alguien todavía está interesado, recientemente me encontré con iconos similares. Estaba compilando un proyecto de C # .net usando VS 2008. Descubrí que VS no podía localizar los ensamblajes para esas referencias. Cuando hice doble clic en VS, actualicé las referencias y eliminé los íconos de algunos de [EDITAR: que AHORA podría localizar]. Para las referencias restantes, tuve que compilar los ensambles respectivos.

HappyTown
fuente
4

Agregando mis 2 centavos a la respuesta @ kad81,

Vaya a Visual Studio -> BUILD -> Configuration Manager

En el menú desplegable "Plataforma de soluciones activas" en la esquina superior derecha (la mía es VS 2012), si se trata de "Plataformas mixtas", cámbiela a la plataforma adecuada en función de sus ensambles de referencia de terceros.

Luego, en cada uno de los proyectos de la lista, asegúrese de seleccionar la misma plataforma para todo el proyecto. (si no existe x86, seleccione "", luego puede seleccionar "x86").

Reconstruya los proyectos de la biblioteca primero y luego haga referencia a los proyectos. Espero que esto ayude.

JenonD
fuente
4

Intenta cerrar y abrir VS.

Parece tonto, pero después de 1 hora de seguir lo anterior y encontrar todo alineado bien. Reinicié VS 2017 y los problemas desaparecieron.

Alex Stephens
fuente
1
Trabajó para mi. Tonto o no a veces, Visual Studio se confunde y su caché se arruina. Gracias por sugerirlo, odiaba hacerlo porque me sentí estúpido pensando que funcionaría, pero qué "diablos", después de una hora de otras cosas podría hacerlo y tada funcionó
Blake
2

En el núcleo de Asp.net, en algún momento se muestra alerta si cambia el espacio o el nombre del proyecto. Para eliminar este tipo de alertas, simplemente descargue Project y cárguelo nuevamente. Si el problema persiste, significa que no puede encontrar su referencia de ensamblaje.

Tomcat0x4d2e47
fuente
1

Tenía estos íconos por una razón diferente. Tenemos una gran solución para todos nuestros proyectos (casi 100). Hice una subselección de los proyectos que me interesaban e hice una nueva solución. Sin embargo, las referencias donde el proyecto hace referencia en lugar de referencias a los dll compilados ...

Después de algunas investigaciones encontré este enlace en GitHub que explica que este es un nuevo comportamiento en VS2015.

En la página de GitHub, explican una solución alternativa para convertir referencias de proyecto en referencias binarias.

Martijn
fuente
1

Para arreglar algunas cosas que no funcionan, tiene sentido eliminar algunas bibliotecas a veces, ¿cómo no sonaría raro?

De todos modos, creo que el problema es demasiado amplio y podría deberse a diferentes factores. , así que quiero compartir mi situación / solución.

Tenía un proyecto (traído por el cliente) con las bibliotecas Xamarin Forms y Telerik. En general, la cosa estaba relacionada con los componentes, que las bibliotecas no están incluidas en la carpeta de paquetes, ni están disponibles a través de Nuget (de pago).

Las referencias de todo el proyecto fueron "amarillas", se veía horrible y aterrador.

La solución fue simplemente eliminar esas referencias de Telerik (incluidos algunos controles en el código que estaban usando eso). Justo después de eso, todas las referencias obtuvieron mágicamente su color gris normal común y los errores (en su mayoría) desaparecieron.

"Principalmente", porque los mensajes de error "todo rojo alrededor" sobre "el elemento no está definido en ningún lado" a veces todavía ocurren. Eso es extraño y trae inconvenientes, pero aún puedo compilar y ejecutar los proyectos: solo necesito limpiar la solución, reiniciar Visual Studio, rezar un poco, limpiar de nuevo, eliminar las carpetas obj / bin, reiniciar de nuevo, y funciona bien.

La clave es eliminar las referencias de bibliotecas no disponibles , ya que los mensajes de error dicen absolutamente otra cosa. (Por ejemplo, algo como "Xamarin.Build.Download.XamarinDownloadArchives no encontrado o no puede encontrar algo", etc., pero eso podría significar que no tiene algunas referencias disponibles.

Luego quite la carpeta de paquetes, vuelva a cargar / vuelva a abrir el proyecto / solución, vaya a "Administrar paquetes Nuget" y haga clic en el botón "Restaurar".

Agat
fuente
1

Usando Visual Studio 2019 con todos los proyectos dirigidos a .Net Core 3.1, la solución fue:

  1. Limpiar / Construir / Reconstruir.
  2. Reiniciar Visual Studio 2019
Riaan van Zyl
fuente
0

También enfrenté el mismo problema, pero mi caso fue un poco diferente a los anteriores. Traté de abrir un proyecto creado en una computadora diferente. Descubrí que la ruta a la carpeta del paquete no se actualiza cuando agrega una referencia, por lo que reiniciar VS, cambiar la versión de .NET o cualquier recomendación mencionada no resuelve el problema. Abrí el archivo csproj en notepad ++ y corregí todas las rutas relativas a la carpeta de paquetes. Luego; Todas las advertencias se han ido. Espero eso ayude.

Ali
fuente
0

en VS 2017 Haz una limpieza y luego construye

usuario1684037
fuente
0

Gracias a todos por la ayuda. Aquí hay un desglose de cómo solucioné mi problema:

Haga clic derecho en su proyecto> Propiedades

En Aplicación, cambie el Marco de destino. En mi caso, ImageSharp estaba usando .Net 4.6.1. Puede encontrar esto en su package.config.

Ve a las referencias de tu proyecto. Notarás que SixLabors tiene un triángulo amarillo. Tienes que actualizar el paquete NuGet.

Haga clic derecho en Referencias> Administrar paquetes NuGet.

Actualiza SixLabors.

Es posible que tenga ligeras actualizaciones de código (consulte a continuación), pero esto solucionó mi problema.

¿Convertir ImageSharp.Image a ImageSharp.PixelFormats.Rgba32?

Phoenix Wright
fuente
0

En Visual Studio 2019, uno de los marcos de destino de mis proyectos era .net core, pero hacía referencia a otro proyecto cuyo marco de destino era .net estándar. Cambié todos los proyectos para hacer referencia al estándar .net y los íconos desaparecieron. Para ver cuál es su proyecto, haga clic derecho y haga clic en propiedades y mire el marco de Target. También puede hacer clic normalmente en el proyecto y mirar la etiqueta <TargetFramework> en <PropertyGroup>

Abovempo
fuente
0

En una solución multiproyecto, si todo lo demás falla ... En el proyecto de inicio, verifique. Dependencias-> Asambleas y ver si el proyecto al que se hace referencia está errado. Eliminarlo y reconstruir.

Babatunde Ahmed
fuente