Metodo non trovato: '!! 0 [] System.Array.Empty ()'


123

Ho creato una nuova app con VS 2015 RC e il modello MVC e senza modificare alcuna riga di codice ho questo errore:

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 prima volta che succede a me, quindi al momento sono bloccato


possibile duplicato di MVC 5 Bundle Error
ramiramilu

Risposte:


232

Ho avuto questa situazione sul server di produzione mentre sulla macchina di sviluppo tutto andava bene.

L'installazione di .NET Framework 4.6 sul computer di destinazione ha risolto il problema.


46
PC LOAD LETTER!
JeremyWeir

9
Grazie. Molto probabilmente ciò che sta accadendo è che: - Il codice viene compilato rispetto a .NET 4.6, dove gli assembly di riferimento includono Array.Empty <T> (). - Il compilatore Roslyn vede che Array.Empty <T> è disponibile e quindi lo usa quando genera l'array vuoto necessario per i parametri. - L'app compilata sta tentando di funzionare su .NET 4.5 in cui Array.Empty non viene chiuso.
wkalter

2
Il nostro server Windows 2008R2 doveva essere riavviato una volta dopo l'installazione.
Karl

2
Durante la ricerca di una risposta,
ho

Ho installato .net461 ma ho ancora lo stesso errore. L'installazione di net472 ha fatto il trucco per me
berniefitz il

27

Ci scusiamo per il ritardo alla festa, ma nel caso qualcun altro ottenga questo problema tramite una build TeamCity, posso descrivere cosa dovevamo fare.

.NET 4.6 è stato installato sul nostro server di compilazione (ma non sul server delle applicazioni) e RunnerType era Visual Studio (sln) e l'opzione Visual Studio era impostata su 2015.

Ciò ha costretto la build a utilizzare 4.6 e avevo bisogno di modificare l'opzione Visual Studio su 2013 per forzare la build a utilizzare 4.5.2


5
Un mio buon collega mi ha fatto notare che puoi creare con Visual Studio 2015 se il tuo agente di compilazione ha il requisito DotNetFrameworkTargetingPack4.5.2_Path TeamCity costruirà quindi la soluzione verso 4.5.2, anche se 4.6 è installato
gautejohan

2
Ho risolto questo problema utilizzando il pacchetto di sviluppo 4.5.2 come suggerito da @gman. In situazioni in cui non si desidera avere 4.6 installato, questa sembra una soluzione migliore.
Dougc

Chiedendo dopo molti anni, questo è per te @Dougc. Mi trovo in una situazione simile, non voglio che 4.6 sia installato e ho 4.5.2 installato. Ho ancora questo problema. Che cosa ha suggerito Gman ??
singsuyash

@singsuyash, nella configurazione del progetto, vai a Requisiti dell'agente. Lì fai clic su aggiungi nuovo requisito. Digitare DotNetFrameworkTargetingPack4.5.2_Path nel nome del parametro e impostare la condizione per esistere.
gautejohan

11

Solo per gli altri che affrontano questa situazione:

se guardi nel file web.config ti accorgerai che nel <compilation>tag hai il valore targetFrameworkimpostato su una versione inferiore alla 4.6. ma in realtà, al momento della compilazione hai pubblicato la tua applicazione tramite .NET FrameWork 4.6 o successivo (corrisponde a ASP.NET MVC 4.6 e successivo).

Quindi, se modifichi il valore di targetFrameworka 4.6, l'errore cambierà forma in:

L'attributo "targetFramework" attualmente fa riferimento a una versione successiva alla versione installata di .NET Framework.

questo è il vero errore e lo eliminerai installando la versione appropriata di .Net FrameWork nell'ambiente di produzione della tua Web App.


Tuttavia, dopo aver eseguito questa operazione e in base al modello di progetto selezionato al momento della creazione dell'applicazione, se sono installate le applicazioni insight e codeDom, potrebbe essere necessario disinstallarle come ho fatto io. Ho ricevuto un errore di matrice che risaliva a roslyn e Microsoft Application Insight.
Clarence

3

L'aggiornamento di .NET Framework alla versione più recente (4.7.2) ha risolto il problema. Grazie a @Andrey Kovalenko per la soluzione.

Ma l'errore non dovrebbe essere come

inserisci qui la descrizione dell'immagine

Non sono sicuro che dire a ogni cliente dell'aggiornamento del proprio .NET Framework sia applicabile. Ho avuto questo problema soprattutto nel sistema operativo Windows Embedded OS , solo nell'ambiente di produzione.

C'è un altro modo per superare il comportamento, dalla nostra stessa base di codice.?


1
Anche il targeting di .NET Framework (4.0 Client Profile) precedente per il mio progetto e tutti i progetti DLL hanno funzionato. :)
Naveen Kumar V

2

Provo queste soluzioni senza successo.

La soluzione per me è stata andare nel pool di applicazioni, passare alla 2.0, eseguire il sito sul browser, vedere l'errore (perché la versione è sbagliata) e tornare alla 4.0 e "voilà", ho capito, il sito web aperto.


2

Forse è troppo tardi ma ho avuto lo stesso problema e ho risolto come di seguito. Uso Visual Studio 2015, la compilazione della configurazione su web.config punta a .NET FrameWork 4.6 per impostazione predefinita. Non ho potuto modificare solo sul file web.config. Se non puoi installare .NET FrameWork 4.6 sul server e la tua applicazione non lo usa.

  1. Vai al menu Debug> Proprietà [Nome progetto]> Applicazione.
  2. scegli .NET Framework 4.5 (o qualsiasi server che supporti e sia compatibile con la tua applicazione) dall'elenco a discesa Target Framwork.
  3. Ricostruisci di nuovo.

0

Nel mio caso, ho avuto un'installazione .NET corrotta sul mio Windows Server 2012 R2. Ho dovuto installare una versione più recente di .NET (v4.7.1) e il sito ora funziona.


0

Nel mio caso, non ho accesso a IIS stesso e stavo riscontrando questo problema quando stavo usando un unico metodo che non ha nulla di speciale solo cose da .net 2.

La soluzione: ho estratto quel metodo e ho creato una libreria di classi con .net 2.0 e funziona.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.