9

Tengo el siguiente código, que muestra una línea roja ondulada debajo de la expresión lambda después de .Any (debido a una "invocación ambigua" entre System.Linq versiones 3.5 y 4.0 - ¿cómo puedo forzar que se use una versión particularInvocación ambigua causada por la obtención de dos versiones de System.Linq

se compila y funciona muy bien

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)) 
{ ... } 

ACTUALIZACIÓN:

ahora he comprobado todos (60) proyectos en todo el?. solución y todo t Las referencias a System.dll y System.Core.dll son de la versión 4.0. Realmente no puedo entender de dónde proviene la referencia a 3.5.

+0

Si se compila y funciona bien, ¿es simplemente un problema cosmético, entonces? ¿Has intentado reconstruir por completo el proyecto? – svick

+0

Es solo un problema cosmético, pero aún molesto. Intentó reconstruir sin alegría ... – greg84

+0

¿Estaba usando Resharper? –

Respuesta

6

Probablemente tenga dos módulos que hagan referencia a versiones diferentes. Busque los archivos del proyecto para esas referencias y tráigalos a consistencia (4.0).

+0

Hola @Bertrand: he comprobado todos los proyectos en la solución completa y todas las referencias a System.dll y System.Core.dll son de la versión 4.0. ¡Realmente no puedo entender de dónde está obteniendo 3.5! :( – greg84

+0

Extraño. ¿Cómo se ven sus declaraciones de uso? –

+1

Hola @BertrandLeRoy - parece que reiniciar la máquina hizo el truco! Muy extraño. Te daré la respuesta ya que eso es lo primero que hice cuando me enfrenté con el problema. Gracias por su ayuda. – greg84

10

Tuve este problema después de que ReSharper me ofreció 'referencia System.Core' e 'import System.Linq' en un archivo donde estaba usando una expresión Linq pero todavía no había importado 'System.Linq'. Cuando ejecuté el comando ReSharper, recibí un error de que una parte había fallado. Entonces todas las expresiones de Linq en mi proyecto eran ambiguas entre System.Core 3.5 y 4.0. Mirando todas mis referencias System System y System.Core, eran 4.0. La eliminación de la referencia a System.Core (4.0) provocó que los errores de ambigüedad desaparecieran e hizo que System.Core desapareciera de la lista de referencias para ese proyecto. Cuando volví a volver a agregar System.Core, aunque no apareció en mi lista de referencias en el Explorador de soluciones, se verificó en el cuadro de diálogo "Agregar referencia a". Al intentar desmarcarlo allí y volver a verificarlo, se produjo un error al hacer referencia a System.Core en mi proyecto. Todavía estoy corrigiendo errores, así que no sé si esto afectará el proceso de compilación.

+6

Me encontré con el mismo problema con el reafilamiento y acabé con el mismo resultado. Busqué en Google el error inmediatamente, encontré esta pregunta, leí la primera respuesta, reinicié VS después de leer los comentarios sobre la respuesta de Bertrand y eso lo solucionó. La compilación funcionó bien inmediatamente después del reinicio. –

+1

@NickLarsen es bueno saberlo. Incluso después del reinicio todavía tengo mi error donde System.Core no aparece en la lista de referencias del Explorador de soluciones, pero aparece marcado en el cuadro de diálogo "Agregar referencia a ..." e intentando desmarcar y volver a comprobar System.Core, se produce un error que System.Core ya está agregado. ¡Ojalá hubiera ido con el reinicio inicialmente! Cuando llegue a una construcción limpia, descubriré si este es un problema duradero para mí ... –

Cuestiones relacionadas