Perché ricevo un'icona di avviso quando aggiungo un riferimento a un progetto di plug-in MEF?


321

Vorrei testare la classe principale di un plugin facendo riferimento direttamente al progetto del plugin e creando un'istanza della classe del plugin. Quando creo un progetto dell'app Console di test e aggiungo un riferimento al progetto del plug-in, visualizzo un'icona di avviso (triangolo giallo con punto esclamativo) accanto al riferimento nell'elenco Riferimenti.

Quando invece aggiungo un riferimento alla dll, l'output di compilazione dell'assembly del plug-in, non ricevo tale avviso. Cosa potrebbe cercare di dirmi questo avvertimento?


8
La maggior parte delle volte, i triangoli di avvertimento avranno suggerimenti o (in mancanza) una voce nella finestra degli errori. Probabilmente, i due progetti hanno dipendenze incompatibili.
Damien_The_Unbeliever il

2
Eventuali avvisi nella console quando si tenta di compilare?
Jite,

231
Ho visto questo con i progetti rivolti a diverse versioni di
framwork

4
@OP potresti selezionare la risposta di kad81 come quella corretta
Andy,

5
Questo mi prende sempre . Aggiunta di un nuovo progetto a una soluzione .NET 4 e il valore predefinito è 4.5.
Robin French,

Risposte:


674

Come menzionato nei commenti della domanda, le diverse versioni di .NET Framework tra i progetti possono causare questo. Controlla le proprietà del tuo nuovo progetto per assicurarti che non venga utilizzata una versione predefinita diversa.


13
Quello che devo anche sapere è perché Visual Studio ha accettato di aggiungere quei riferimenti allora?
Anders Lindén,

16
Sto usando VS 2015 e il problema è ancora lì. Ho perso mezz'ora prima di venire qui.
Alisson,

14
nemmeno un testo al passaggio del mouse o errori di compilazione che spiegano quale sia il problema
matao

6
Posso confermare che questa era la radice del problema. Può anche confermare che Visual Studio 2017 con l'aggiornamento 15.3 non ha ancora risolto il problema di non mostrare effettivamente un messaggio significativo. Molto noioso.
Greg R Taylor,

4
@matao Agreed! È fastidioso non riuscire a ottenere alcun dettaglio sull'errore ...
nterry

74

Si è verificato lo stesso problema con un'app Web ASP.Net e due progetti di classi di librerie a cui era necessario fare riferimento all'interno dell'app Web. Non sono state fornite informazioni sul motivo per cui la compilazione non è riuscita e i riferimenti non sono validi.

La soluzione era garantire che tutti i progetti avessero lo stesso Target Framework:

In Visual Studio 2015- Progetto clic destro> Proprietà> Applicazione> Framework di destinazione

Soluzione di salvataggio, pulizia e ricostruzione. I riferimenti al progetto non dovrebbero più apparire come avvertimenti gialli e la soluzione verrà compilata.

La mia app Web era indirizzata a .Net 4.5 mentre gli altri due progetti di classe di libreria dipendenti avevano come target .Net v4.5.2


44

Per entrambi (o tutti) i progetti che si desidera utilizzare insieme:

Fare clic con il tasto destro sul progetto> Proprietà> Applicazione> Target .NET framework

Assicurati che entrambi (o tutti) i tuoi progetti utilizzino la stessa versione di .NET framework.


Perfetto, ha funzionato per me! Ho avuto un progetto MVC con .NET Framework 4.5.2. E le mie librerie di classi a cui fa riferimento erano .NET Framework 4.7.
Mike Upjohn,

Si potrebbe pensare che i nuovi progetti aggiunti a una soluzione esistente sarebbero abbastanza intelligenti da sapere quale versione, ma purtroppo non è il caso.
Ron,

39
  1. Assicurarsi che tutte le versioni siano uguali per ciascun progetto, fare clic su ciascun progetto e vedere la versione qui Progetto> Proprietà> Applicazione> Framework .NET di destinazione

  2. un. Vai su Strumenti> Nuget Package Manager> Package Manager Console Tipo Update-Package -Reinstall (se non funziona vai a 2.b )

    b. QUESTO È CRITICO MA LA POSSIBILITÀ PIÙ GRANDE CHE FUNZIONA . Rimuovi <Target> Forse con più righe </ Target> di solito si trova nella parte inferiore di .csproj.

  3. Salva, carica e crea la soluzione.


1
Grazie a ciò, un bel messaggio di errore in Visual Studio sulle versioni .Net non andrebbe fuori strada qui!
Colmde

1
@colmde in modo interessante se si pulisce la soluzione la finestra di output visualizza il seguente messaggio: 'Il pacchetto è stato ripristinato usando .NetFramework XXX invece del framework di destinazione .NetFramework XXX. Il pacchetto potrebbe non essere completamente compatibile con il tuo progetto '
elszeus

1
La parte 2.b che non è stata annotata in altre risposte è stata fondamentale per me! 2.b Rimuovi <Target> Forse con più righe </ Target> di solito si trova nella parte inferiore di .csproj.
shelbypereira,

1
La parte 2.b è completamente folle ma funziona! grazie
Elo,

1
Grazie 2.b ha fatto il trucco anche per me. Non avrei mai capito da solo.
Henrik Clausen,

23

Reinstalla tutti i pacchetti in tutti i progetti della soluzione corrente:

Update-Package -Reinstall

2
Sebbene questo suggerimento non abbia risolto direttamente il mio problema, mi ha indicato la giusta direzione per il mio scenario. Per quelli che possono essere d'aiuto, ho dovuto cambiare la fonte del mio pacchetto NuGet in v3 per Update-Package per trovare la versione giusta da scaricare: docs.nuget.org/consume/package-manager-dialog#package-sources
John Lee

1
Rimosse tutti i pacchetti, li installò e tornarono i triangoli gialli.
Anders Lindén,

8

Assicurati di avere i progetti destinati alla stessa versione del framework . La maggior parte delle volte la ragione sarebbe che il progetto corrente (in cui si sta aggiungendo il riferimento di un altro progetto) punta a una versione del framework .net diversa rispetto alle altre .


5

Controllare NETFramework della DLL indicata e del progetto in cui si sta aggiungendo la DLL. Esempio: DLL ==> versione supportata = "v4.0" Progetto ==> versione supportata = "v3.0"

Verrà visualizzata l'icona di avviso. Soluzione: rendere coerente la versione della dll.


5

Per quanto mi riguarda, ho riscontrato questo problema facendo riferimento a una libreria di classi .NET Standard 2.0 in un'applicazione console .NET Framework 4.7.1. Sì, i framework sono diversi, ma sono compatibili (.NET Standard dovrebbe funzionare con .NET Core e .NET Framework.) Ho provato a pulire, ricostruire, rimuovere e leggere il riferimento del progetto, ecc ... senza successo . Infine, uscire da Visual Studio e riaprire ha risolto il problema.


4

È passato molto tempo da quando questa domanda è stata posta, ma se qualcuno è ancora interessato - di recente mi sono imbattuto in icone simili. Stavo compilando un progetto C # .net usando VS 2008. Ho scoperto che VS non riusciva a localizzare gli assembly per quei riferimenti. Quando ho fatto doppio clic su VS, ho aggiornato i riferimenti e rimosso le icone su alcuni di quei [EDIT: che potrebbe ORA individuare]. Per i riferimenti rimanenti, ho dovuto compilare i rispettivi assiemi.


4

Aggiungendo i miei 2 centesimi alla risposta @ kad81,

Vai a Visual Studio -> BUILD -> Configuration Manager

Nell'elenco a discesa "Piattaforma soluzione attiva" nell'angolo in alto a destra (il mio è VS 2012), se si tratta di "piattaforme miste", cambiarlo nella piattaforma appropriata in base alle assemblee di terze parti di riferimento.

Quindi in ciascuno dei progetti nell'elenco, assicurati di selezionare la stessa piattaforma per tutto il progetto. (se x86 non esiste, quindi selezionare "", quindi è possibile selezionare "x86".)

Ricostruire prima i progetti di libreria e quindi i progetti di riferimento. Spero che questo ti aiuti.


4

Prova a chiudere e aprire VS.

Sembra sciocco ma dopo 1 ora di seguire quanto sopra e trovare tutto allineato OK. Ho riavviato VS 2017 e i problemi erano spariti.


1
Ha funzionato per me. A volte sciocco o no, Visual Studio viene confuso e la sua cache viene rovinata. Grazie per averlo suggerito - odiavo farlo perché mi sentivo stupido pensando che avrebbe funzionato ma che diamine "- dopo un'ora di altre cose avrei potuto anche farlo e tada ha funzionato
Blake

2

Nel core Asp.net a volte mostra un avviso se si modifica lo spazio o il nome del progetto. Per rimuovere questo tipo di avvisi basta scaricare Project e caricarlo di nuovo. Se il problema persiste, significa che non è possibile trovare il riferimento dell'Assemblea.


1

Ho avuto queste icone per un motivo diverso. Abbiamo una grande soluzione per tutti i nostri progetti (quasi 100). Ho fatto una sottoselezione dei progetti a cui ero interessato e ho creato una nuova soluzione. Tuttavia, i riferimenti in cui il progetto fa riferimento invece di riferimenti alle DLL compilate ....

Dopo alcune ricerche ho trovato questo link su GitHub che spiega che si tratta di un nuovo comportamento in VS2015.

Nella pagina GitHub spiegano una soluzione alternativa per convertire i riferimenti di progetto in riferimenti binari.


1

Per risolvere alcune cose che non funzionano ha senso rimuovere alcune librerie a volte, come potrebbe non sembrare strano.

Comunque, credo che il problema sia troppo ampio e potrebbe essere causato da diversi fattori , quindi voglio condividere la mia situazione / soluzione.

Ho avuto un progetto (portato dal cliente) con le librerie Xamarin Forms e Telerik. La cosa era in generale relativa ai componenti, che le librerie non sono incluse nella cartella dei pacchetti, né disponibili tramite Nuget (quelle a pagamento).

L'intero progetto I riferimenti erano "gialli", sembrava orribile e spaventoso.

La soluzione era solo quella di rimuovere quei riferimenti di Telerik (inclusi alcuni controlli nel codice che lo stavano usando). Subito dopo tutti i riferimenti magicamente ottennero il loro comune colore grigio normale e gli errori (per lo più) scomparvero.

"Principalmente" - perché a volte i messaggi di errore "tutto rosso" su "l'elemento non è definito da nessuna parte" si verificano ancora. È strano e causa inconvenienti, ma sono ancora in grado di compilare ed eseguire i progetti: ho solo bisogno di pulire la soluzione, riavviare Visual Studio, pregare un po ', pulire di nuovo, rimuovere le cartelle obj / bin, riavviare di nuovo, ed è funziona bene.

La cosa fondamentale è rimuovere i riferimenti alle librerie non disponibili , poiché i messaggi di errore dicono assolutamente un'altra cosa. (Ad esempio, qualcosa come "Xamarin.Build.Download.XamarinDownloadArchives non trovato o impossibile trovare qualcosa" ecc., Ma ciò potrebbe significare che non hai alcuni riferimenti disponibili.

Quindi rimuovere la cartella dei pacchetti, ricaricare / riaprire il progetto / la soluzione, andare su "Gestisci pacchetti Nuget" e fare clic sul pulsante "Ripristina".


1

Utilizzando Visual Studio 2019 con tutti i progetti destinati a .Net Core 3.1 la soluzione era:

  1. Pulisci / Costruisci / Ricostruisci.
  2. Riavvia Visual Studio 2019

0

Ho anche affrontato lo stesso problema, ma il mio caso era un po 'diverso da quelli sopra. Ho provato ad aprire un progetto creato in un altro computer. Ho scoperto che il percorso della cartella del pacchetto non viene aggiornato quando si aggiunge un riferimento, quindi il riavvio di VS, la modifica della versione .NET o qualsiasi raccomandazione menzionata non risolve il problema. Ho aperto il file csproj in notepad ++ e ho corretto tutti i percorsi relativi alla cartella dei pacchetti. Poi; tutti gli avvertimenti sono spariti. Spero che sia d'aiuto.



0

Grazie a tutti per l'aiuto. Ecco una ripartizione di come ho risolto il mio problema:

Fare clic con il tasto destro sul progetto> Proprietà

In Applicazione modifica il Framework di destinazione. Nel mio caso ImageSharp utilizzava .Net 4.6.1. Puoi trovarlo nel tuo package.config.

Vai ai riferimenti del tuo progetto. Noterai che SixLabors ha un triangolo giallo. Devi aggiornare il pacchetto NuGet.

Fare clic con il tasto destro su Riferimenti> Gestisci pacchetti NuGet.

Aggiorna SixLabors.

Potresti avere lievi aggiornamenti del codice (vedi sotto) ma questo ha risolto il mio problema.

Convertire ImageSharp.Image in ImageSharp.PixelFormats.Rgba32?


0

In Visual Studio 2019, uno dei miei progetti target framework era .net core ma faceva riferimento a un altro progetto il cui framework target era .net standard. Ho cambiato tutti i progetti in riferimento allo standard .net e le icone sono scomparse. Per vedere qual è il tuo progetto, fai clic con il pulsante destro del mouse e fai clic su Proprietà e osserva Target framework. Puoi anche fare normalmente clic sul progetto stesso e guardare il tag <TargetFramework> in <Gruppo di proprietà>


0

In una soluzione multiprogetto, se ogni altra cosa fallisce ... Nel progetto startUp, selezionare. Dipendenze-> Assiemi e vedere se il progetto referenziato errato è presente. Rimuovilo e ricostruiscilo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.