9

Ho il seguente codice, che mostra una linea rossa ondulata sotto l'espressione lambda dopo .Any (a causa di una "invocazione ambigua" tra System.Linq versioni 3.5 e 4.0 - come faccio a forzarlo ad utilizzare una particolare versioneInvocazione ambigua causata dal rilevamento di due versioni di System.Linq

si compila e funziona bene

string[] allowedExtensions = { "PNG", "JPG", "JPEG", "GIF" }; 
string fileExtension = (Path.GetExtension(postedFile.FileName) ?? "NULL").ToUpper().TrimStart(new[] { '.' }); 

if (this.MediaService.FileAllowed(postedFile) 
    && allowedExtensions.Any(e => e == fileExtension)) 
{ ... } 

UPDATE:

ora ho controllato tutti (60) i progetti in tutta?. soluzione e tutto t fa riferimento a System.dll e System.Core.dll sono la versione 4.0 - Non riesco davvero a capire dove stia ottenendo il riferimento a 3.5 da.

+0

Se compila e funziona bene, allora è solo un problema estetico? Hai provato a ricostruire completamente il progetto? – svick

+0

È solo un problema estetico, ma comunque fastidioso. Ho provato la ricostruzione senza gioia ... – greg84

+0

Stavi usando Resharper? –

risposta

6

Probabilmente hai due moduli che fanno riferimento a versioni diverse. Cerca i file di progetto per quei riferimenti e portali alla consistenza (4.0).

+0

Ciao @Bertrand - Ho controllato tutti i progetti nell'intera soluzione e tutti i riferimenti a System.dll e System.Core.dll sono la versione 4.0 - Non riesco davvero a capire da dove ottenga 3.5 da! :( – greg84

+0

Strano, che aspetto hanno le tue istruzioni d'uso? –

+1

Ciao @BertrandLeRoy: sembra che il riavvio della macchina abbia fatto il trucco! Molto strano, ti darò la risposta dato che è la prima cosa che ho fatto di fronte al Problema, grazie per il tuo aiuto – greg84

10

Ho riscontrato questo problema dopo che ReSharper si era offerto di "fare riferimento a System.Core" e "importa System.Linq" in un file in cui stavo usando un'espressione Linq ma non avevo ancora importato "System.Linq". Quando ho eseguito il comando ReSharper, ho ricevuto qualche errore che parte di esso era fallita. Quindi tutte le espressioni Linq nel mio progetto erano ambigue tra System.Core 3.5 e 4.0. Guardando tutti i miei riferimenti System e System.Core, erano 4.0. La rimozione del riferimento a System.Core (4.0) ha causato l'eliminazione degli errori di ambiguità e ha fatto scomparire System.Core dall'elenco di riferimenti per quel progetto. Quando sono tornato per aggiungere nuovamente System.Core, sebbene non fosse presente nel mio elenco di riferimenti in Solution Explorer, è stato selezionato nella finestra di dialogo "Aggiungi riferimento a". Tentare di deselezionarlo e quindi ricontrollarlo ha comportato un errore che System.Core ha già fatto riferimento al mio progetto. Sto ancora correggendo gli errori quindi non so se questo influenzerà il processo di compilazione.

+6

Mi sono imbattuto nello stesso identico problema con resharper proprio ora e ho finito con lo stesso risultato. Ho cercato su Google l'errore immediatamente, ho trovato questa domanda, ho letto la prima risposta, ho riavviato VS dopo aver letto i commenti sulla risposta di Bertrand e l'ho risolto. La build ha funzionato bene subito dopo il riavvio. –

+1

@NickLarsen buono a sapersi. Anche dopo il riavvio, ho ancora il mio errore in cui System.Core non compare nell'elenco di riferimenti di Solution Explorer, ma compare la finestra di dialogo "Aggiungi riferimento a ...", e tentando di deselezionare e ricontrollare System.Core ci sono errori che System.Core è già stato aggiunto. Vorrei essere partito con il riavvio inizialmente! Quando avrò una build pulita, scoprirò se questo è un problema duraturo per me ... –

Problemi correlati