Método no encontrado: '!! 0 [] System.Array.Empty ()'

123

Creé una nueva aplicación con VS 2015 RC y la plantilla MVC y sin modificar ninguna línea de código tengo este error:

Method not found: '!!0[] System.Array.Empty()'.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.MissingMethodException: Method not found: '!!0[] System.Array.Empty()'.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:


[MissingMethodException: Method not found: '!!0[] System.Array.Empty()'.]
   SAASApp.BundleConfig.RegisterBundles(BundleCollection bundles) in C:\Proyectos\SAASApp\SAASApp\App_Start\BundleConfig.cs:29
   SAASApp.MvcApplication.Application_Start() in C:\Proyectos\SAASApp\SAASApp\Global.asax.cs:18

[HttpException (0x80004005): Method not found: '!!0[] System.Array.Empty()'.]
   System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +483
   System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +118
   System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +176
   System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +350
   System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +305

[HttpException (0x80004005): Method not found: '!!0[] System.Array.Empty()'.]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +661
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +96
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +189

La primera vez me pasa, así que estoy atrapado en este momento

Luis Valencia
fuente
posible duplicado de MVC 5 Bundle Error
ramiramilu

Respuestas:

232

Tuve esta situación en el servidor de producción mientras estaba en la máquina de desarrollo, todo estaba bien.

La instalación de .NET Framework 4.6 en la máquina de destino ha solucionado el problema.

Andrey Kovalenko
fuente
46
¡CARTA DE CARTA PARA PC!
JeremyWeir
9
Gracias. Lo más probable es que lo que sucede es que: - El código se está compilando contra .NET 4.6, donde los ensamblados de referencia incluyen Array.Empty <T> (). - El compilador de Roslyn ve que Array.Empty <T> está disponible y, por lo tanto, lo utiliza al generar la matriz vacía necesaria para los parámetros. - La aplicación compilada está intentando ejecutarse en .NET 4.5 donde Array.Empty no sale.
wkalter
2
Nuestro servidor Windows 2008R2 tuvo que reiniciarse una vez después de la instalación.
Karl
2
Al buscar una respuesta, encontré este hilo que brinda más información sobre por qué sucede esto github.com/dotnet/roslyn/issues/4889
Reuven Abliyev
Instalé .net461 pero aún tuve el mismo error. Instalar net472 fue el truco para mí
berniefitz
27

Perdón por llegar tarde a la fiesta, pero en caso de que alguien más tenga este problema a través de una compilación de TeamCity, puedo describir lo que tuvimos que hacer.

.NET 4.6 se instaló en nuestro servidor de compilación (pero no en el servidor de aplicaciones), y RunnerType fue Visual Studio (sln) y la opción Visual Studio se configuró en 2015.

Esto obligó a la compilación a usar 4.6, y necesitaba cambiar la opción de Visual Studio a 2013 para forzar la compilación a usar 4.5.2

Gautejohan
fuente
55
Un buen colega mío me señaló que puede compilar con Visual Studio 2015 si su agente de compilación tiene el requisito DotNetFrameworkTargetingPack4.5.2_Path TeamCity compilará la solución hacia 4.5.2, incluso si está instalado 4.6
gautejohan
2
Resolví este problema usando el paquete de desarrollo 4.5.2 como sugirió @gman. En situaciones en las que no desea tener 4.6 instalado, esto parece una mejor solución.
Dougc
Preguntando después de muchos años, esto es para ti @Dougc. Estoy en una situación similar, no quiero 4.6 instalado y tengo 4.5.2 instalado. Todavía me sale este problema. ¿Qué sugirió Gman?
singsuyash
@singsuyash, en la configuración del proyecto, vaya a Requisitos del agente. Allí hace clic en Agregar nuevo requisito. Escriba DotNetFrameworkTargetingPack4.5.2_Path en el nombre del parámetro y establezca la condición para que exista.
gautejohan
11

Solo para otros que enfrentan esta situación:

si busca en el archivo web.config, se dará cuenta de que en la <compilation>etiqueta tiene el valor targetFrameworkestablecido en una versión inferior a 4.6. pero, de hecho, en el momento de la compilación publicó su aplicación a través de .NET FrameWork 4.6 o superior (corresponde a ASP.NET MVC 4.6 y superior).

Entonces, si cambia el valor de targetFrameworka 4.6, el error cambiará de forma a:

El atributo 'targetFramework' actualmente hace referencia a una versión posterior a la versión instalada de .NET Framework.

este es el error real y lo eliminará instalando la versión adecuada de .Net FrameWork en el entorno de producción de su aplicación web.

AmiNadimi
fuente
Sin embargo, después de hacer esto, y dependiendo de la plantilla de proyecto seleccionada cuando se creó la aplicación, si tiene instaladas las aplicaciones Insight y CodeDom, es posible que deba desinstalarlas como lo hice yo. Recibí un error de matriz que se remonta a roslyn y Microsoft Application Insight.
Clarence
3

La actualización de .NET Framework a su última versión (4.7.2) resolvió el problema. Gracias a @Andrey Kovalenko por la solución.

Pero no debería ser el error como,

ingrese la descripción de la imagen aquí

No estoy seguro de decirle a cada cliente sobre la actualización de su .NET Framework es aplicable. Tuve este problema especialmente en el sistema instalado Windows Embedded OS , solo en el entorno de producción.

¿Hay alguna otra forma de superar el comportamiento, desde nuestra propia base de código?

Naveen Kumar V
fuente
1
Dirigido a .NET Framework (4.0 Client Profile) anterior para mi proyecto y todos los proyectos de DLL también funcionaron. :)
Naveen Kumar V
2

Intento estas soluciones sin éxito.

La solución para mí fue ir al grupo de aplicaciones, pasar a 2.0, ejecutar el sitio en el navegador, ver el error (porque la versión es incorrecta) y volver a 4.0 y "voilà", lo tengo, el sitio web abierto.

Roberto Gentile
fuente
2

Tal vez sea demasiado tarde, pero tuve el mismo problema y lo solucioné como a continuación. Uso Visual Studio 2015, la compilación de configuración en web.config apunta a .NET FrameWork 4.6 de forma predeterminada. No podía editar solo en el archivo web.config. Si no puede instalar .NET FrameWork 4.6 en el servidor y su aplicación no lo usa.

  1. Vaya al menú Depurar> Propiedades [Nombre del proyecto]> Aplicación.
  2. elija .NET Framework 4.5 (o cualquier servidor que sea compatible y compatible con su aplicación) de la lista desplegable de Target Framwork.
  3. Reconstruir de nuevo.
waewta artpongsa
fuente
0

En mi caso, tuve una instalación corrupta de .NET en mi Windows Server 2012 R2. Tuve que instalar una versión más reciente de .NET (v4.7.1) y el sitio funciona ahora.

André Hauptfleisch
fuente
0

En mi caso, no tengo acceso al IIS en sí y estaba teniendo este problema cuando estaba usando un método único que no tiene nada especial, solo cosas de .net 2.

La solución: extraje ese método y creé una biblioteca de clases con .net 2.0 y funciona.

Ricardo França
fuente
0

He degradado 4.6.xa 4.5.2 y funcionó bien.

Bhavesh Patel
fuente