Saltar al contenido

Agregue una referencia a System.Core cuando ya esté referenciada por el sistema de compilación

Siéntete libre de divulgar nuestro sitio y códigos en tus redes, danos de tu ayuda para aumentar esta comunidad.

Solución:

Después de investigar un poco, todo lo que pude encontrar fueron tickets de SO anteriores y algunos blogs, y finalmente todos terminaron usando la misma solución alternativa que usted. Luego encontré un informe de error que alguien presentó en Microsoft Connect en 2011 (ahora solo disponible en Wayback Machine, o en un formato más legible en mi blog), que finalmente fue respondida un año más tarde por Chuck England, un empleado de MSFT.

TL; DR: fue una decisión consciente que tomó el equipo debido a la función de orientación múltiple agregada a VS2008 (poder cambiar el destino de .NET Framework de un proyecto).

Dado que el marco de destino requiere “System.Core”, y eliminarlo evitaría una compilación (hasta donde puedo entender la respuesta de Chuck), decidieron forzar una referencia a él incluso si realmente no lo ve en la lista de referencias.

Podría decirse que es un truco de “seguridad”, con un efecto secundario indeseable que arroja ese error cuando intenta agregarlo a las referencias nuevamente, y termina necesitando editar el archivo del proyecto directamente.


Microsoft Connect se retiró en 2018, pero aquí están las partes relevantes del hilo original:

Sí, la experiencia no es genial. Dado que se requiere System.Core, nunca debe eliminarlo. Arreglamos esto agregándolo por usted incluso si elimina la referencia. [A]s el mensaje que vio indica, System.Core está implícitamente referenciado. Por lo tanto, el hecho de que lo haya eliminado, aparte de eliminar físicamente una línea del archivo del proyecto, no ha cambiado la compilación de ninguna manera.

Hay escenarios legítimos en los que es posible que desee poder hacer esto, pero es un caso de esquina muy nervioso. Sin embargo, debemos ignorar ciegamente el hecho de que cuando lo vuelves a agregar se genera un error. Mucho de esto nos lo impusieron versiones anteriores que no entendían la orientación múltiple y simplemente no se limpiaron.

[Y]Puede volver a agregarlo manualmente haciendo clic con el botón derecho en el nodo del proyecto y seleccionando Descargar. Vuelva a hacer clic con el botón derecho en el nodo del proyecto y seleccione Editar. En el editor, copie otra línea de referencia (por ejemplo, la de “Sistema”) y péguela debajo de la referencia original dentro del mismo ItemGroup. Cambie el nombre de la referencia a “System.Core”. Haga clic con el botón derecho en el nodo del proyecto y seleccione Recargar. Elija “sí” para la pregunta para guardar y volver a cargar.

VS2008 no manejó la orientación múltiple correctamente. Le permitiría construir cosas que no eran legítimas. Con VS2010, nos hemos esforzado mucho para asegurarnos de que si se compila para el marco de destino, se ejecutará en el marco de destino. No puedo decir que conozco ningún lugar donde esto no sea true.

No podemos volver al método VS2008, ya que no comprende la orientación múltiple. Ni entendió true “perfiles”, como el perfil de cliente del marco .NET 4.0. De hecho, el problema que está viendo se debe a que el sistema VS2008 se actualizó para manejar la orientación múltiple y es el nuevo conjunto de reglas el que rechaza la referencia.

En este caso, compilamos aunque eliminó una referencia. Se podría decir, pero no debería haberse construido. Pero se ejecutará en el marco objetivo y, por lo tanto, debería haberse construido. El hecho de que hayamos agregado una referencia “requerida” para usted es una experiencia algo rota en la forma en que se desarrolló.

Realmente no nos dimos cuenta de esto lo suficientemente temprano, y con una comprensión realmente sólida de cómo podríamos solucionarlo para obtener una solución antes de nuestro lanzamiento. Pero, el hecho de que siempre debe hacer referencia y, por lo tanto, nunca eliminar “System.Core”, hizo que esto no se solucionara, ya que no es algo que el 99% de los clientes harían alguna vez.

Sobre la base de la respuesta de @ Arthur, encontré dos cosas que me resolvieron:

añadir .csproj archivo, la línea que falta:


Luego, de acuerdo con una respuesta de forums.asp.net, agregue la referencia de ensamblado System.Core en main web.config (no el que está debajo de Vistas):

  
    
      
        
        
        
      
    
    
    
  

Entonces:

1) Asegúrese de que la versión del marco .NET para la propiedad de compilación en web.config sea la misma que la especificada en las propiedades del proyecto.

2) Asegúrese de que la versión del ensamblado MVC en la carpeta de vistas web.config sea la misma que la del ensamblado MVC que está utilizando en su proyecto.

3) Reinicie Visual Studio (2017 aquí).

Espero que esto ayude.

Recuperado agregando manualmente estas líneas al archivo .csproj:



Comentarios y valoraciones del post

Finalizando este artículo puedes encontrar las aclaraciones de otros usuarios, tú también eres capaz mostrar el tuyo si lo crees conveniente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *