Methode nicht gefunden: '!! 0 [] System.Array.Empty ()'

123

Ich habe eine neue App mit VS 2015 RC und der MVC-Vorlage erstellt. Ohne Änderung einer Codezeile tritt der folgende Fehler auf:

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

Das erste Mal passiert es mir, also stecke ich im Moment fest

Luis Valencia
quelle
Mögliches Duplikat von MVC 5 Bundle Error
Ramiramilu

Antworten:

232

Ich hatte diese Situation auf dem Produktionsserver, während auf der Entwicklungsmaschine alles in Ordnung war.

Die Installation von .NET Framework 4.6 auf dem Zielcomputer hat das Problem behoben.

Andrey Kovalenko
quelle
46
PC-LADEBRIEF!
JeremyWeir
9
Danke dir. Am wahrscheinlichsten ist Folgendes: - Der Code wird gegen .NET 4.6 kompiliert, wobei die Referenzassemblys Array.Empty <T> () enthalten. - Der Roslyn-Compiler erkennt, dass Array.Empty <T> verfügbar ist, und verwendet es daher beim Generieren des leeren Arrays, das für die Parameter benötigt wird. - Die kompilierte App versucht, unter .NET 4.5 ausgeführt zu werden, wo Array.Empty nicht beendet wird.
wkalter
2
Unser Windows 2008R2 Server musste nach der Installation einmal neu gestartet werden.
Karl
2
Bei der Suche nach einer Antwort wurde dieser Thread gefunden, der weitere Hintergrundinformationen darüber gibt, warum dies geschieht. Github.com/dotnet/roslyn/issues/4889
Reuven Abliyev
Ich habe .net461 installiert, hatte aber immer noch den gleichen Fehler. Die Installation von net472 hat den Trick für mich
getan
27

Es tut mir leid, dass ich zu spät zur Party gekommen bin, aber falls jemand anderes dieses Problem über einen TeamCity-Build bekommt, kann ich beschreiben, was wir tun mussten.

.NET 4.6 wurde auf unserem Build-Server (aber nicht auf dem Anwendungsserver) installiert, und RunnerType war Visual Studio (sln), und die Option Visual Studio wurde auf 2015 festgelegt.

Dies zwang den Build zur Verwendung von 4.6, und ich musste die Visual Studio-Option auf 2013 ändern, um den Build zur Verwendung von 4.5.2 zu zwingen

Gautejohan
quelle
5
Ein guter Kollege von mir hat mich darauf hingewiesen, dass Sie mit Visual Studio 2015 erstellen können, wenn Ihr Build-Agent die Anforderung DotNetFrameworkTargetingPack4.5.2_Path hat. TeamCity erstellt dann die Lösung in Richtung 4.5.2, auch wenn 4.6 installiert ist
gautejohan
2
Ich habe dieses Problem mithilfe des 4.5.2-Entwicklungspakets behoben, wie von @gman vorgeschlagen. In Situationen, in denen 4.6 nicht installiert sein soll, scheint dies eine bessere Lösung zu sein.
Dougc
Nach vielen Jahren zu fragen, ist dies für Sie @Dougc. Ich bin in einer ähnlichen Situation, ich möchte nicht 4.6 installiert und ich habe 4.5.2 installiert. Trotzdem bekomme ich dieses Problem. Was hat Gman vorgeschlagen?
Singsuyash
@singsuyash Gehen Sie in der Projektkonfiguration zu Agent Requirements. Dort klicken Sie auf Neue Anforderung hinzufügen. Geben Sie DotNetFrameworkTargetingPack4.5.2_Path in den Parameternamen ein und legen Sie die Bedingung fest.
Gautejohan
11

Nur für andere, die mit dieser Situation konfrontiert sind:

Wenn Sie in die Datei web.config schauen, werden Sie feststellen, dass Sie im <compilation>Tag den Wert targetFrameworkauf eine Version unter 4.6 gesetzt haben. Tatsächlich haben Sie Ihre Anwendung zum Zeitpunkt der Erstellung über .NET FrameWork 4.6 oder höher veröffentlicht (entspricht ASP.NET MVC 4.6 und höher).

Wenn Sie also den Wert von targetFrameworkauf 4.6 ändern, ändert sich die Form des Fehlers in:

Das Attribut 'targetFramework' verweist derzeit auf eine Version, die später als die installierte Version von .NET Framework ist.

Dies ist der eigentliche Fehler, den Sie beheben können, indem Sie die entsprechende Version von .Net FrameWork in der Produktionsumgebung Ihrer Web-App installieren.

AmiNadimi
quelle
Nachdem Sie dies getan haben und abhängig von der beim Erstellen der Anwendung ausgewählten Projektvorlage die Insight- und CodeDom-Anwendungen installiert haben, müssen Sie sie möglicherweise wie ich deinstallieren. Ich habe einen Array-Fehler erhalten, der auf Roslyn und Microsoft Application Insight zurückgeht.
Clarence
3

Durch das Aktualisieren von .NET Framework auf die neueste Version (4.7.2) wurde das Problem behoben. Vielen Dank an @Andrey Kovalenko für die Lösung.

Aber sollte der Fehler nicht so sein,

Geben Sie hier die Bildbeschreibung ein

Ich bin nicht sicher, ob es für jeden Kunden relevant ist, sein .NET Framework zu aktualisieren. Ich hatte dieses Problem insbesondere bei installierten Windows Embedded OS- Systemen, nur in der Produktionsumgebung.

Gibt es eine andere Möglichkeit, das Verhalten von unserer Codebasis aus zu überwinden?

Naveen Kumar V.
quelle
1
Das Targeting älterer .NET Framework (4.0-Clientprofile) für mein Projekt und alle DLL-Projekte hat ebenfalls funktioniert. :)
Naveen Kumar V
2

Ich versuche diese Lösung ohne Erfolg.

Die Lösung für mich war, in den Anwendungspool zu gehen, auf 2.0 zu wechseln, die Site im Browser auszuführen, den Fehler zu sehen (weil die Version falsch ist) und auf 4.0 und "voilà" zurückzukehren, ich habe es verstanden, die Website geöffnet.

Roberto Gentile
quelle
2

Vielleicht ist es zu spät, aber ich habe das gleiche Problem und behoben wie unten. Ich benutze Visual Studio 2015 die Konfiguration Kompilierung auf web.config Punkt auf .NET Framework 4.6 standardmäßig aktiviert . Ich konnte nicht nur die Datei web.config bearbeiten. Wenn Sie .NET FrameWork 4.6 nicht auf dem Server installieren können und Ihre Anwendung es nicht verwendet.

  1. Gehen Sie zum Menü Debug> [Projektname] Eigenschaften> Anwendung.
  2. Wählen Sie .NET Framework 4.5 (oder einen beliebigen Server, der Ihre Anwendung unterstützt und kompatibel ist) aus der Dropdown-Liste Target Framwork aus.
  3. Wieder aufbauen.
waewta artpongsa
quelle
0

In meinem Fall hatte ich eine beschädigte .NET-Installation auf meinem Windows Server 2012 R2. Ich musste eine neuere Version von .NET (v4.7.1) installieren und die Site funktioniert jetzt.

André Hauptfleisch
quelle
0

In meinem Fall habe ich keinen Zugriff auf den IIS selbst und ich hatte dieses Problem, als ich eine einzelne Methode verwendete, die nur über .net 2 nichts Besonderes enthält.

Die Lösung: Ich habe diese Methode extrahiert und eine Klassenbibliothek mit .net 2.0 erstellt, und sie funktioniert.

Ricardo França
quelle
0

Ich habe 4.6.x auf 4.5.2 heruntergestuft und es hat gut funktioniert.

Bhavesh Patel
quelle