Errore "Impossibile trovare il file di metadati '… \ Release \ project.dll' in Visual Studio”


135

Di recente ho iniziato a ricevere questo messaggio in modo casuale:

Impossibile trovare il file di metadati '... \ Release \ project.dll' in Visual Studio

Ho una soluzione con diversi progetti. La modalità di generazione corrente è Debug e tutte le configurazioni dei progetti sono impostate su Debug. Ma quando provo a eseguire il progetto principale - a volte mi dà alcuni errori, che sono tutti "File di metadati '... \ Release \ projectX.dll" non è stato trovato "- e, guarda, dice RELEASE cartella, sebbene la modalità corrente sia Debug. Perché? Ho provato a cercare il riferimento a "Release \ projectX.dll" all'interno di tutti i file della soluzione e ne ho trovato uno nel file ResolveAssemblyReference.cache.

Ho fatto una buona ricerca su Internet e ho trovato alcune persone con un problema simile, ma non c'era soluzione, o almeno nessuna soluzione funzionante.

Ho cercato di eliminare i riferimenti a quei progetti e di leggerli, ma dopo qualche tempo ricomincio a ricevere questi errori.

Sembra un insetto. Perché cerca i progetti referenziati nelle cartelle Release quando uso sempre la modalità Debug?

PS. Per coloro che hanno riscontrato questo problema: non sono riuscito a risolverlo in modo semplice. È scomparso solo dopo aver reinstallato Windows :(


La prima cosa da fare per problemi come questo è eliminare il file .suo e ricostruirlo.
sfogo il

questo problema può verificarsi se una DLL di riferimento utilizza una versione (inferiore) diversa di .net Framework
m4ngl3r

Stavo riscontrando questo problema in modo coerente fino a quando non ho disattivato le build parallele. Penso che ci sia un bug nel controllo della dipendenza della build parallela, probabilmente correlato alla memorizzazione nella cache di informazioni non aggiornate. (Per la cronaca, ora uso le build parallele e le ricostruisco di nuovo se si verifica il problema, che di solito funziona.)
yoyo


Risposte:


138

Tutti hanno ragione ... prova tutto ... (per un po 'di tempo sprecato)

  1. Hai un codice errato? Risolvilo per primo.
  2. Soluzione pulita e riavvio di Visual Studio
  3. Rimuovi / Aggiungi riferimenti
  4. Controlla il tuo ordine di costruzione con progetti più grandi e verifica
  5. Ricostruire manualmente sottoprogetti
  6. Copia manuale delle DLL tra i progetti nelle cartelle bin associate
  7. Vai a prendere un caffè, gioca a flipper e torna domani ... potresti pensare a qualcos'altro nel frattempo.

17
Devi ripulire tutti gli ERRORI e rendere stabili le soluzioni / il progetto.
Ravi Ram

questo accade a causa della differenza di nomi nel nome della cartella e nel nome dello spazio dei nomi. Se si crea uno spazio dei nomi con un determinato nome e successivamente lo si rinomina, lo spazio dei nomi avrà lo stesso nome precedente. E la compilazione prenderà il vecchio percorso per trovare il file .dlle .exe. Per evitare ciò, aprire il .csprojfile di ogni spazio dei nomi con un file di testo e trovare il vecchio percorso nel file. rimuovilo, pulisci e ricostruisci la soluzione. Questo ha funzionato per me. Ho trascorso un'intera giornata a lavorare su questo problema.
Sooraj,

Se non hai successo e ci vuole tempo, torna a provare prima alcune delle cose di base. Ho iniziato a costruire sotto-progetti, ho ancora riscontrato errori, ma poi ho chiuso e riaperto VS, ricostruito la soluzione, tutto ha funzionato.
Chris Halcrow,

6
Avevo lo spazio dei nomi e i nomi dei progetti non corrispondenti in una DLL di riferimento fatta in casa. Inoltre, è stato creato con .NET 4.5.2 anziché 4.5. Uomo!
Jess

1
Prova a eliminare il file .suo. È relativamente comune che venga danneggiato.
Timbo,

21

Ho avuto lo stesso identico problema. Grande soluzione di Visual Studio con oltre 50 progetti.

Tutti i riferimenti sono stati aggiunti come progetti. L'ordine di costruzione del progetto era corretto (fare clic con il tasto destro del mouse sul progetto e selezionare l'ordine di costruzione).

Tuttavia, quando si costruirono alcuni dei progetti di livello superiore, il progetto "radice" da cui dipendevano non fu costruito.

Il problema era che questi progetti non erano stati selezionati per essere compilati con la configurazione corrente (non so come sia successo).

Per verificare questo selezionare "Configuration Manager" (menu Build) e verificare se i progetti problematici sono impostati per la compilazione.


Grazie! Questo ha funzionato alla grande per me quando, per qualche motivo, la mia configurazione di rilascio non ha creato uno dei miei progetti.
Vectovox,

Mi hai salvato la vita!
Chethan Shetty,

16

Quando hai detto di aver eliminato i riferimenti a quei progetti e di averli nuovamente aggiunti, come li hai aggiunti di nuovo esattamente? Hai usato la scheda "Sfoglia" nella finestra di dialogo "Aggiungi riferimento" in Visual Studio? Oppure hai usato la scheda "Progetti" (che elenca i progetti vicini nella tua soluzione)?

modificare : se usi la scheda "Sfoglia" e aggiungi manualmente il riferimento al tuo .dll che si trova nella cartella / Release, Visual Studio cercherà sempre il .dll in quella posizione, indipendentemente dalla modalità in cui ti trovi attualmente in (debug o rilascio).

Se hai rimosso il file .dll effettivo dalla cartella Release (manualmente o eseguendo "Soluzione pulita"), il tuo riferimento verrà interrotto perché il file .dll non esiste.

Suggerirei di rimuovere il riferimento a ProjectX.dll e aggiungerlo di nuovo, ma questa volta, utilizzare la scheda "Progetti" nella finestra di dialogo "Aggiungi riferimento". Quando aggiungi un riferimento in questo modo, Visual Studio sa dove ottenere il DLL appropriato. Se sei in modalità Debug, lo otterrà dalla cartella / Debug. Se in modalità di rilascio, la cartella / Release. Il tuo errore di compilazione dovrebbe scomparire e non farai più riferimento (improprio) a una DLL di rilascio in modalità Debug.


Ho usato la scheda "Sfoglia" nella finestra di dialogo "Aggiungi riferimento"
nightcoder,

1
Per me Visual Studio ha creato un projectname.v11 di tipo "Opzioni utente della soluzione Visual Studio". Ho cancellato questo file e riavviato e tutto andava bene.
Wes Grant,

15

Bene, la mia risposta non è solo il riassunto di tutte le soluzioni, ma offre molto di più.

Sezione 1):

In generale soluzioni:

Ho riscontrato 4 errori di questo tipo ("impossibile trovare il file dei metadati") con 1 errore che diceva "Impossibile aprire il file di origine (" Errore non specificato ")".

Ho cercato di eliminare l'errore "Impossibile trovare il file dei metadati". Per questo, ho letto molti post, blog ecc. E ho scoperto che queste soluzioni potrebbero essere efficaci (riassumendole qui):

  1. Riavvia VS e prova a ricostruire.

  2. Vai a "Esplora soluzioni" . Fare clic con il tasto destro su Soluzione. Vai a Proprietà . Vai a "Configuration Manager" . Controlla se le caselle di controllo in "Build" sono selezionate o meno. Se alcuni o tutti sono deselezionati, quindi controllali e prova a ricostruire.

  3. Se le soluzioni di cui sopra non funzionano, segui la sequenza menzionata nel passaggio 2 sopra e anche se tutte le caselle di controllo sono selezionate, deselezionale, controlla di nuovo e prova a compilare di nuovo.

  4. Ordine di costruzione e dipendenze del progetto:

    Vai a "Esplora soluzioni" . Fare clic con il tasto destro su Soluzione. Vai a "Dipendenze del progetto ..." . Vedrai 2 schede: "Dipendenze" e "Ordine di costruzione" . Questo ordine di compilazione è quello in cui si sviluppa la soluzione. Controllare le dipendenze del progetto e l'ordine di costruzione per verificare se un progetto (ad esempio "progetto1") che dipende da altri (ad esempio "progetto2") sta provando a costruire prima di quello (progetto2). Questa potrebbe essere la causa dell'errore.

  5. Controlla il percorso del DLL mancante:

    Controlla il percorso del DLL mancante. Se il percorso contiene spazio o qualsiasi altro carattere di percorso non valido, rimuovilo e prova a ricostruire.

    Se questa è la causa, regola l'ordine di costruzione.


Sezione 2):

Il mio caso particolare:

Ho provato tutti i passaggi precedenti con varie permutazioni e combinazioni con il riavvio di VS alcune volte. Ma non mi ha aiutato.

Così, ho deciso di eliminare altri errori che stavo riscontrando ("Impossibile aprire il file di origine (" Errore non specificato ")").

Mi sono imbattuto in un blog: http://www.anujvarma.com/tfs-errorsource-file-could-not-be-opened-unspecified-error/#comment-1539

Ho provato i passaggi menzionati in quel blog e mi sono liberato dell'errore "Impossibile aprire il file di origine (" errore non specificato ")" e sorprendentemente mi sono liberato anche di altri errori ("impossibile trovare il file dei metadati") .


Sezione (3):

Morale della storia:

Prova tutte le soluzioni come indicato nella sezione (1) sopra (e qualsiasi altra soluzione) per eliminare l'errore. Se non funziona nulla, come nel blog menzionato nella sezione (2) sopra, elimina dal file .csproj le voci di tutti i file di origine che non sono più presenti nel controllo del codice sorgente e nel file system .



1
Ho votato questa risposta perché stavamo incontrando questo problema per un collega. Il suo sistema in qualche modo ha perso la maggior parte / tutte le sue dipendenze, quindi quando si costruisce, non si costruisce nel giusto ordine, perché il "file di metadati per" whatever.dll "non esiste". Abbiamo appena esaminato tutti i suoi progetti con un altro sistema per convalidare tutte le dipendenze di cui aveva bisogno per ciascun progetto.
jmbertucci,

Bene ... Sono contento che la mia risposta ti sia stata di aiuto.
Vikram,

11

Ho avuto questo problema in precedenza e l'unico modo che ho trovato per risolverlo è eseguire Clean Solution e quindi riavviare Visual Studio.


1
Non aiuta nella mia situazione, dopo breve tempo il problema si ripresenta.
nightcoder

Questo è ciò che l'ha risolto per me.
splintore

3
Questo ha funzionato anche per me. Ha fatto più pulizie e niente ha funzionato. Una volta che ho fatto una pulizia e riavviato, ha iniziato a funzionare di nuovo. Che noioso.
Ricky,

8

Per me di solito è il framework di destinazione disattivato (4.5.2 anziché 4.6) Se si corregge il framework di destinazione del progetto in modo che corrisponda al framework di destinazione della soluzione e alla creazione, verrà creato un nuovo DLL.


Ho avuto lo stesso problema per un progetto creato con una versione precedente di Visual Studio. Dopo aver aggiornato VS, i progetti sono stati creati con una versione più recente di .NET e hanno causato il problema DLL non trovata. (Vai al riquadro delle proprietà per il progetto per visualizzare / modificare la versione .NET.) Grazie!
Tony S Yu,

Grazie milioni di volte (questo è il numero di altre soluzioni che ho provato). Questo ha funzionato. Per qualche ragione la libreria che sto aggiungendo stava
prendendo di

1
Ho aggiunto un nuovo progetto di libreria di classi (dll) a cui è stato fatto riferimento in diversi altri progetti. La nuova dll era .NET Framework 4.8 mentre tutti gli altri progetti erano 4.7.2. La modifica del framework Target (nelle proprietà del progetto) in 4.7.2 ha risolto questo problema per me. Grazie Adamo!
iCode


3

La maggior parte delle risposte afferma che è necessario rimuovere le librerie della soluzione, questo è vero ma quando si aggiungono nuovamente le librerie l'errore verrà visualizzato di nuovo. È necessario verificare se tutte le librerie a cui si fa riferimento hanno un framework .net compatibile con il framework .net della soluzione. Quindi correggere tutti gli errori nel codice e ricostruire la soluzione.


3

Hai controllato le impostazioni di Configuration Manager? Nella finestra di dialogo delle impostazioni del progetto nell'angolo in alto a destra.

A volte capita che tra tutte le voci di rilascio arrivi una voce di debug. In tal caso, la dipendenza automatica creata dal grafico delle dipendenze della soluzione viene confusa.


L'ho controllato. Tutti i progetti hanno la stessa configurazione.
nightcoder

2

Ho anche riscontrato questo errore nelle soluzioni in cui ho più progetti (di solito progetti netTiers in cui ho aggiornato uno o più sottoprogetti per indirizzare il framework 4.0). Può essere problematico da rimuovere. Spesso può essere risolto, tuttavia, correggendo prima tutti gli altri errori nei sottoprogetti (ad es. Eventuali riferimenti mancanti), ricostruendo individualmente tali sottoprogetti, quindi rimuovendo / aggiungendo eventuali riferimenti a tali sottoprogetti in Visual Studio. Personalmente, ho avuto poca fortuna a risolvere questo errore pulendo la soluzione da solo.


1
Rimuovere i riferimenti da altri progetti (la mia UI e i progetti di test, ad esempio), correggere gli errori (nel progetto Core), costruire e quindi aggiungere nuovamente quei riferimenti mi ha aiutato.
Ken Pespisa,

2

Di recente abbiamo riscontrato questo problema dopo l'aggiornamento a Office 2010 da Office 2007: abbiamo dovuto modificare manualmente i riferimenti nel nostro progetto alla versione 14 degli Interoper di Office che utilizziamo in alcuni progetti.

Spero che questo aiuti - ci sono voluti alcuni giorni per capirlo.


2

Nel mio caso è stato causato da due cose (VS.2012):

1) Uno dei progetti è stato configurato per AnyCPU anziché x86

2) Un progetto a cui era stato fatto riferimento aveva in qualche modo deselezionato il riquadro "Crea".

Controlla la tua Build | Configuration Manager per ottenere una panoramica di ciò che viene creato e per quale piattaforma. Assicurati anche di controllarlo sia per il debug che per il rilascio poiché potrebbero avere impostazioni diverse.


2

Nel mio caso, ho riscontrato alcuni errori nel mio codice. Visual Studio ha mostrato l'errore che hai riscontrato invece degli errori effettivi, come errori di sintassi o nomi di classi sconosciuti. Prova a pulire la soluzione e a costruire un progetto dopo l'altro. In questo modo scoprirai gli errori reali.

Ancora una volta, questo è proprio ciò che causa l'errore per me .


2

Ho avuto questo problema e ho impiegato molto tempo per capirlo. Si è verificato un problema quando ho rimosso i progetti dalla soluzione e li ho sostituiti con pacchetti nuget.

La soluzione sembrava andare bene, ma il file .csproj conteneva ancora quei progetti più volte come riferimento.

Sembra che VS non pulisca il file in modo appropriato. Faceva ancora riferimento ai progetti rimossi sotto il cofano. Quando rimossi manualmente i riferimenti dal file csproj tutto funziona di nuovo! wohoo


2

Questo problema è dovuto a file pdb o CodeContracts.

Per risolverlo:

  1. Pulisci la cartella di output e ricostruisci la soluzione.

  2. Riconfigurare CodeContracts o disabilitarlo per la compilazione temporanea.


2

Abbiamo questo problema abbastanza spesso, ma solo con riferimenti a progetti C ++ / CLI di progetti C #. È ovviamente un bug nel profondo di Visual Studio che Microsoft ha deciso di non risolvere, perché è "troppo complesso" e hanno promesso una revisione del sistema di compilazione C ++ che ora è destinato a Visual Studio 2010.

Questo è successo qualche tempo fa, e forse la correzione è persino andata in Visual Studio 2008; Non ci ho più dato seguito. Tuttavia, la nostra soluzione alternativa era

  • Cambia configurazione
  • Riavvia Visual Studio
  • Costruisci la soluzione

Dopo che questo problema scompare per sempre o solo temporaneamente? E cosa intendi con "switch configuration"? Ad esempio, utilizzo sempre la configurazione di debug. Cosa dovrei fare?
nightcoder

Scompare temporaneamente. In realtà, potrebbe non essere una soluzione per te se non passi mai la configurazione tra debug e release. O passare al rilascio e quindi il debug potrebbe risolverlo, chissà;)
OutOfMemory

Bene, qualche giorno fa sono passato al rilascio, ho creato la soluzione e poi sono tornato a Debug. Dopo questo il problema è mutato :): ora ottengo solo 1 di questi errori invece di alcuni - è come se altri progetti fossero stati "riparati" :)
nightcoder

2

Ho avuto lo stesso problema da solo.

Visual Studio 2013 mi ha solo detto che non poteva fare riferimento ad esso e non è stato possibile trovare i metadati. Quando ho aperto la mia soluzione (che contiene più progetti) mi ha detto che stavo usando progetti inferiori alla versione quadro di uno dei miei progetti.

Quindi ho passato tutto alla versione 4.5 e ha funzionato di nuovo.


Questa è stata la stessa risoluzione a cui ho avuto questo problema. Alcuni dei riferimenti hanno utilizzato un Framework superiore alla mia applicazione di base, quando ho cambiato il Framework nell'applicazione di base in 4.5.2 (lo stesso degli altri riferimenti), il problema è scomparso. Tuttavia, VS non ha detto nulla sulle diverse versioni del framework ..
NoLifeKing il

1

Mi sembra di ricordare di aver avuto un problema simile qualche mese fa. L'ho risolto temporaneamente copiando la DLL di riferimento nella cartella Release, soddisfacendo così le aspettative di Visual Studio. Successivamente, ho scoperto il riferimento alla DLL di rilascio nel mio codice attuale. Dovresti provare a fare una ricerca nell'intero progetto per \ release \ project.dll.

Inoltre, ho notato che i progetti di test di unità di Visual Studio a volte inseriscono un attributo "DeploymentItem" su ciascuno dei metodi di test che puntano alla DLL di destinazione e se si passa da Debug a Release, Visual Studio può confondersi se la DLL non è più nella posizione prevista. Nella mia esperienza, questi attributi possono essere eliminati in modo sicuro se non li hai inseriti tu stesso come parte di uno scenario di "distribuzione singola".


1

Ho avuto questo problema ed era a causa di un metodo non valido nella libreria offensiva (dll) che non restituiva un valore, ad es.

public bool DoSomething()
{
   //I never bothered putting code here....

}

Quando ho commentato tutto compilato :)


Stavo per scrivere la stessa risposta ma ho notato che hai già menzionato questo problema. Ho avuto lo stesso problema, in cui non ho restituito valore booleano e il messaggio di errore per quel problema è stato nascosto tra tonnellate di altri problemi generati dopo il fatto.
gonzobrains,

1

A volte VS2010 cambia la mia configurazione da qualsiasi CPU a piattaforme miste. Quando ciò accade, viene visualizzato questo messaggio di errore.

Per risolverlo, torno su Qualsiasi CPU:
1. Fare clic con il tasto destro del mouse sulla soluzione e selezionare Proprietà.
2. Fare clic su Proprietà di configurazione e quindi sul pulsante Gestione configurazione ...
3. In Piattaforma soluzione attiva selezionare Qualsiasi CPU


1

Trovo che ciò si verifichi di solito quando ho ancora una dichiarazione di metodo in un'interfaccia, che una classe implementa, ma che in seguito ho rimosso e avevo dimenticato di rimuovere anche dall'interfaccia. Di solito salvo l'intera soluzione ogni 30 minuti e poi torno indietro a una versione precedente se non riesco a trovare l'errore.


1

Ho finito per eliminare i miei riferimenti (li avevo aggiunti correttamente usando la scheda progetti, e li costruivo benissimo), modificando a mano i miei file .csproj e rimuovendo le voci bizzarre che non appartenevano e impostando i miei output per il debug e release, x86 e x64 e qualsiasi CPU per essere tutti "\ bin" - l'ho creato una volta, quindi ho aggiunto nuovamente il riferimento (di nuovo, usando la scheda progetti) e tutto ha iniziato a funzionare di nuovo per me. Non è stato necessario riavviare Visual Studio.


1

Per me questo è stato causato dal target Build che è stato riscritto per non generare la dll. La rimozione di questo per ricadere sul target Build predefinito risolto il problema.


1

nel mio caso stavo lavorando a un direttore di filiale. così ho controllato il ramo principale, ho eseguito una build e poi ho verificato il mio ramo. Risolto il problema. Se sei già in master, ti suggerisco di controllare il commit precedente e quindi costruirlo.


1
Wow! Ho provato così tante opzioni, niente ha funzionato. Ma questo ha risolto il problema! Grazie
amico

0

Sembra accadere quando si verifica una soluzione con più progetti che hanno riferimenti tra di loro e non l'hai mai costruita prima. Se hai riferimenti direttamente alle DLL, invece di fare riferimento al progetto, riceverai questo messaggio. Utilizzare sempre la scheda Progetti nella finestra di dialogo Aggiungi riferimento per aggiungere un riferimento a un progetto nella stessa soluzione. In questo modo VS può conoscere l'ordine corretto in cui costruire la soluzione


0

lo stesso è successo a me oggi come descritto da Vidar.

Ho un errore di compilazione in una libreria di helper (a cui fanno riferimento altri progetti) e invece di dirmi che c'è un errore nella libreria di helper, il compilatore fornisce un elenco di errori di tipo MetaFile non trovati. Dopo aver corretto l'errore Build in Helper Library, gli errori MetaFile sono spariti.

C'è qualche impostazione in VS per migliorare questo?


0

Ho avuto lo stesso problema. Ho notato che il mio contesto db (EF4) che si trovava nel progetto dll non era riconosciuto per qualche motivo. L'ho eliminato e ne ho creato un altro. e questo l'ha risolto per me.


0

Ho avuto lo stesso problema oggi.

La mia applicazione, un'applicazione Windows Form, aveva accidentalmente un riferimento a se stessa. Strano.

Una volta rimosso, l'errore è scomparso.

Il riferimento veniva aggiunto ogni volta che trascinavo un controllo utente, situato nel progetto Windows Form stesso, in un modulo.


0

Ho avuto lo stesso problema. Rimuovere e aggiungere manualmente le dll non ha aiutato. ClassLibraries non è stato compilato per tutti i progetti e mancava nella cartella ... \ bin \ Debug per il progetto [perché ho pulito la soluzione per errore]. Poiché la libreria di classi non è stata compilata, ciò significa che potrebbero esserci degli errori da qualche parte in uno di quei sottoprogetti .

Soluzione: poiché le mie DLL erano lì per la cartella ... \ bin \ Release , ho provato a ricostruire in modalità Release e ho trovato un errore su una riga in uno dei progetti secondari. La risoluzione dell'errore e la ricostruzione della soluzione sono state eliminate dall'errore di compilazione.


0

Per me Visual Studio aveva creato un projectname.v11 di tipo "Opzioni utente della soluzione Visual Studio". Ho cancellato questo file e riavviato e tutto andava bene.

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.