Error de compilación: debe agregar una referencia a System.Runtime

209

Estoy preparando una nueva solución ASP.NET MVC 5.1. Estoy agregando un montón de paquetes NuGet y configurándolo con Zurb Foundation, etc.

Como parte de eso, agregué una referencia a un paquete interno de NuGet que es una Biblioteca de clases portátil y creo que esto está causando un problema en el servidor de compilación.

TeamCity falla la compilación con:

El tipo 'System.Object' se define en un ensamblado al que no se hace referencia. Debe agregar una referencia al ensamblado 'System.Runtime, Version = 4.0.0.0

Originalmente agregué la solución para el mismo error o similar al compilar las páginas web de Razor, que solucionan estar en el web.config

<compilation ... >
  <assemblies>
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </assemblies>
</compilation>

Sin embargo, el problema no está resuelto.

Luke Puplett
fuente

Respuestas:

216

Para implementar la corrección, primero expanda la sección de compilación web.config existente que se ve así por defecto:

<compilation debug="true" targetFramework="4.5"/>

Una vez expandido, agregué el siguiente XML de configuración nuevo como se me indicó:

  <assemblies>     
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />   
  </assemblies>

Las etiquetas web.config finales deberían tener este aspecto:

<compilation debug="true" targetFramework="4.5">
  <assemblies>     
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />   
  </assemblies>
</compilation>
Baahubali
fuente
2
Este problema se deslizó en un proyecto MVC dirigido a 4.52, sin PCL conocido pero con muchos paquetes nuGet. Creo que desinstalar VS2013 provocó esto, pero no lo sé como un hecho. El error solo apareció en Vistas que hacían referencia a X-PagedList. Agregar referencia al proyecto web.config (no vistas web.config) lo arregló.
Greg Terrell el
1
@GregTerrell Acabo de tener este problema exacto después de actualizar desde una versión anterior de X.PagedList. Muy frustrante. Agregar la referencia funcionó, luego lo que hice fue eliminar (renombrar) la .vscarpeta después de cerrar el proyecto, volver a abrirla, eliminar la web.configentrada y ahora se construye y funciona bien.
Mardoxx
@Mardoxx He tenido el mismo problema. ¿Es el problema con VS o X.PagedList? Si se trata de un error VS, puedo parchear web.config, pero no quiero alterar los archivos .config si el problema está en X.PagedList.
Jecoms
@Jecoms Respondí a tu problema de github
Mardoxx
3
Recibí este error después de instalar MoreLINQ en mi proyecto .Net 4.5.1. Esta respuesta lo resolvió.
Chris Moschini
125

Agregar una referencia a este ensamblado System.Runtime.dll solucionó el problema:

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Facades\System.Runtime.dll

Aunque ese archivo en esa ruta explícita no existe en el servidor de compilación.

Volveré a publicar con más información una vez que haya encontrado documentación sobre PCL y estas fachadas.

Actualizar

Sí, prácticamente nada en los ensambles de fachadas en todo Internet.

Google:

(Facades OR Facade) Portable Library site:microsoft.com
Luke Puplett
fuente
2
Si no puede encontrar los archivos dll en la carpeta especificada, puede instalar Windows SDK como se explica: stackoverflow.com/a/14517992/3918598
user3918598
Gracias. El enlace anterior funcionó después de instalar 4.5.1 SDK.
Matt Beckman
40
Ahora hay un artículo de KB sobre el Soporte de Microsoft que aborda esto.
Peter Majeed
1
@PeterMajeed Realmente deberías publicar ese comentario como la respuesta aquí. ¡Muchas gracias por el consejo!
julealgon
3
Tuve que establecer 'Copiar local' en verdadero para que funcione
Phate01
28

La única forma en que funcionó para mí. Agregue el ensamblado a web.config

<compilation debug="true" targetFramework="4.5">
  <assemblies>     
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />   
  </assemblies>
</compilation>
Lorena Pita
fuente
1
Gracias Lorena! Trabajó para mí
Annia Martinez
trabajando de una sola línea, no depende de la ruta a la biblioteca y no requiere instalar nada, ¡debería ser aceptado!)
Ivan Zverev
Esta respuesta es la misma que la respuesta más votada por @Baahubali
Jesper Mygind
27

El comentario de @ PeterMajeed en la respuesta aceptada me ayudó con un problema relacionado. No estoy usando la biblioteca portátil, pero tengo el mismo error de compilación en una nueva instalación de Windows Server 2012, donde estoy ejecutando TeamCity.

La instalación de Microsoft .NET Framework 4.5.1 Developer Pack se ocupó del problema (después de haber instalado por separado las herramientas de compilación de MS ).

sfuqua
fuente
55
¿Alguna idea de qué hacer con 4.6? No veo un paquete de desarrollador por ahí.
georgiosd
44
Tengo los paquetes de desarrollo 4.5.1 y 4.5.2 y sigo recibiendo este error. Ideas? No quiero hacer referencia a él en todos mis 25 proyectos. Por algunas razones, otros 25 no lo requieren.
abatishchev
Buenas preguntas: todavía no he tratado con 4.5.2 o 4.6, al menos desde el punto de vista de la automatización de la compilación.
sfuqua
Supongo que si está realmente atascado, siempre puede abrir la versión gratuita de Visual Studio Community Service Edition y mantenerla actualizada.
Luke Puplett el
No entiendo por qué deben instalarse estos paquetes de desarrollador. Instalé VS2013 Pro. ¿No es eso suficiente? Pero resolvió el problema aquí. Gracias.
Mike de Klerk
10

Tuve este problema en algunas soluciones en VS 2015 (aunque no MVC), e incluso en la misma solución en una estación de trabajo pero no en otra. Los errores iniciados aparecieron después de cambiar la versión de .NET a 4.6 y hacer referencia a PCL.

La solución es simple: cierre la solución y elimine la carpeta oculta .vs en la misma carpeta que la solución.

Agregar las referencias que faltan como se sugiere en otras respuestas también resuelve el problema, pero el error permanece resuelto incluso después de eliminar las referencias nuevamente.

En cuanto a TeamCity, no puedo decirlo ya que mi configuración nunca tuvo un problema. Pero asegúrese de restablecer el catálogo de trabajo como parte de su esfuerzo de depuración.

wezzix
fuente
6

Es un problema antiguo, pero lo enfrenté hoy para arreglar una tubería de compilación en nuestro servidor de integración continua. Agregando

<Reference Include="System.Runtime" />

a mi .csprojarchivo me resolvió el problema.

Un poco de contexto: el proyecto interesado es un proyecto completo .Net framework 4.6.1, sin problemas de compilación en las máquinas de desarrollo. El problema aparece solo en el servidor de compilación, que no podemos controlar, puede deberse a una versión diferente del SDK o algo similar.

Agregar lo propuesto <Referencesolucionó el error de compilación, al precio de una referencia faltante advertencia de (triángulo amarillo en la entrada agregada en el árbol de referencias) en Visual Studio.

Espero que esto pueda ayudar a las personas en escenarios similares ...

Pietro Martinelli
fuente
Resuelto para mí también, dentro de un contexto similar
Nicola Celiento
3

Instale .NET Runtime, así como el paquete de orientación para la versión .NET a la que se dirige.

El paquete de desarrollador es solo estas dos cosas agrupadas, pero a partir de hoy no parece tener una versión 4.6, por lo que deberá instalar los dos elementos por separado.

Las descargas se pueden encontrar aquí: http://blogs.msdn.com/b/dotnet/p/dotnet_sdks.aspx#

Enotria
fuente
3

También me enfrentaba a este problema al intentar ejecutar un proyecto ASP .NET MVC después de una pequeña actualización de nuestra base de código, a pesar de que se compiló sin errores:

Mensaje de error del compilador: CS0012: el tipo 'System.Object' se define en un ensamblado al que no se hace referencia. Debe agregar una referencia al ensamblado 'System.Runtime, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a'.

Nuestro proyecto nunca se había encontrado con este problema, por lo que era escéptico sobre cambiar los archivos de configuración antes de descubrir la causa raíz. De los registros de errores pude localizar esta salida detallada del compilador que señalaba lo que realmente estaba sucediendo:

advertencia CS1685: el tipo predefinido 'System.Runtime.CompilerServices.ExtensionAttribute' se define en varios ensamblados en el alias global; usando la definición de 'c: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ mscorlib.dll'

c: \ Users \ Admin \ Software Development \ source-control \ Binaries \ Publish \ WebApp \ Views \ Account \ Index.cshtml (35,20): error CS0012: el tipo 'System.Object' se define en un ensamblaje que está no referenciado Debe agregar una referencia al ensamblado 'System.Runtime, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a'.

c: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Archivos temporales ASP.NET \ meseems.webapp \ 68e2ea0f \ 8c5ee951 \ assembly \ dl3 \ 52ad4dac \ 84698469_3bb3d401 \ System.Collections.Immutable.DLL: (Ubicación del símbolo relacionado al error anterior)

Aparentemente, un nuevo paquete agregado a nuestro proyecto hacía referencia a una versión anterior de .NET Framework, causando el problema de "definición en múltiples ensamblajes" (CS1685), lo que condujo al error del compilador de la vista de afeitar en tiempo de ejecución.

Eliminé el paquete incompatible (System.Collections.Immutable.dll) y el problema dejó de ocurrir. Sin embargo, si el paquete no se puede eliminar en su proyecto, deberá probar la respuesta de Baahubali .

Thomas CG de Vilhena
fuente
2

En nuestro servidor de compilación Tfs 2013 tuve el mismo error, en un proyecto de prueba. con el proyecto web principal ejecutándose en .Net 4.5.1.

Instalé un paquete nuGet de System Runtime y agregué la referencia de los paquetes \ System.Runtime.4.3.0 \ ref \ net462 \ System.Runtime.dll

Eso lo resolvió para mí.

Bob Lokerse
fuente
Eso probablemente no debería funcionar ya que le está diciendo que use la DLL .NET 4.6.2 con un proyecto .NET 4.5.1
Chris Marisic
1
.. y sin embargo funcionó, para mí también. Otra opción ya que el ... \ 45 \ carpeta ... sólo tiene un archivo de código auxiliar, que se llama _._
nathanchere
2

agregué System.Runtime.dll al proyecto bin y funcionó :)

Abdullah Tahan
fuente
1

Tuve este problema en una solución con un proyecto de API web y varios proyectos de biblioteca. Uno de los proyectos de la biblioteca fue borking en la compilación, con errores que decían que los atributos de Unity no eran atributos "válidos", y luego un error decía que necesitaba hacer referencia a System.Runtime.

Después de mucho buscar, reinstalar el paquete de desarrollador 4.5.2, y nada funcionaba, pensé que tal vez era solo una versión no coincidente. Así que miré las propiedades de cada proyecto, y una de las bibliotecas básicas estaba apuntando a 4.5 mientras que todas las demás apuntaban a 4.5.2. Cambié ese también para apuntar a 4.5.2 y los errores desaparecieron.

sliderhouserules
fuente
1

Copio el archivo "C: \ Archivos de programa (x86) \ Assemblies de referencia \ Microsoft \ Framework.NETFramework \ v4.5.1 \ Facades \ system.runtime.dll" a la carpeta bin del servidor de producción, esto resuelve el problema.

Tomluke
fuente
Otra forma es agregar una referencia a este ensamblaje en el proyecto y establecer Copiar local = Verdadero.
John Mc
0

instale https://www.microsoft.com/en-us/download/details.aspx?id=49978 Microsoft .NET Framework 4.6.1 Developer Pack y agregue esta línea de código en el archivo Web.config

<compilation debug="true" targetFramework="4.5">
          <assemblies>
            <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
          </assemblies>
        </compilation>
Muhammad Armaghan
fuente
0

Para mí solo ayudó esta línea de código:

Assembly.Load("System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");

Balabam
fuente
-1

Eliminar la referencia sobre Nuget Package Manager y volver a agregarlo resolvió el problema para mí.

Stefan
fuente