Méthode introuvable: '!! 0 [] System.Array.Empty ()'

123

J'ai créé une nouvelle application avec VS 2015 RC et le modèle MVC et sans modifier aucune ligne de code, j'ai cette erreur:

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 première fois que ça m'arrive, donc je suis coincé en ce moment

Luis Valence
la source
duplication possible de l' erreur du
bundle

Réponses:

232

J'ai eu cette situation sur le serveur de production alors que sur la machine de développement, tout allait bien.

L'installation de .NET Framework 4.6 sur la machine cible a résolu le problème.

Andrey Kovalenko
la source
46
LETTRE DE CHARGE PC!
JeremyWeir
9
Je vous remercie. Ce qui se passe très probablement est que: - Le code est en cours de compilation avec .NET 4.6, où les assemblys de référence incluent Array.Empty <T> (). - Le compilateur Roslyn voit que Array.Empty <T> est disponible et l'utilise donc lors de la génération du tableau vide nécessaire pour les paramètres. - L'application compilée tente de s'exécuter sur .NET 4.5 où Array.Empty ne se ferme pas.
wkalter
2
Notre serveur Windows 2008R2 a dû redémarrer une fois après l'installation.
Karl
2
Lorsque vous cherchez une réponse, vous avez
Reuven Abliyev
J'ai installé .net461 mais j'ai toujours la même erreur. L'installation de net472 a fait l'affaire pour moi
berniefitz
27

Désolé d'être en retard à la fête, mais au cas où quelqu'un d'autre aurait ce problème via une version TeamCity, je peux décrire ce que nous devions faire.

.NET 4.6 a été installé sur notre serveur de build (mais pas sur le serveur d'applications), et le RunnerType était Visual Studio (sln) et l'option Visual Studio était définie sur 2015.

Cela a forcé la version à utiliser 4.6 et j'ai dû modifier l'option Visual Studio en 2013 pour forcer la version à utiliser la version 4.5.2

Gautejohan
la source
5
Un bon collègue à moi m'a fait remarquer que vous pouvez créer avec Visual Studio 2015 si votre agent de build a l'exigence DotNetFrameworkTargetingPack4.5.2_Path TeamCity construira alors la solution vers 4.5.2, même si 4.6 est installé
gautejohan
2
J'ai résolu ce problème en utilisant le pack de développement 4.5.2 comme @gman l'a suggéré. Dans les situations où vous ne voulez pas installer 4.6, cela semble être une meilleure solution.
Dougc
Demander après de nombreuses années, c'est pour vous @Dougc. Je suis dans une situation similaire, je ne veux pas que 4.6 soit installé et que 4.5.2 soit installé. Je reçois toujours ce problème. Qu'est-ce que gman a suggéré ??
singsuyash
@singsuyash, dans la configuration du projet, accédez à Exigences de l'agent. Là, vous cliquez sur ajouter une nouvelle exigence. Tapez DotNetFrameworkTargetingPack4.5.2_Path dans le nom du paramètre et définissez la condition pour exister.
gautejohan
11

Juste pour les autres confrontés à cette situation:

si vous regardez dans le fichier web.config, vous vous rendrez compte que dans <compilation>tag vous avez la valeur targetFrameworkdéfinie sur une version inférieure à 4.6. mais en fait, au moment de la construction, vous avez publié votre application via .NET FrameWork 4.6 ou supérieur (correspond à ASP.NET MVC 4.6 et supérieur).

Donc, si vous modifiez la valeur de targetFrameworkà 4,6, l'erreur changera de forme en:

L'attribut 'targetFramework' fait actuellement référence à une version postérieure à la version installée de .NET Framework.

c'est la vraie erreur et vous vous en débarrasserez en installant la version appropriée de .Net FrameWork dans l'environnement de production de votre application Web.

AmiNadimi
la source
Cependant, après avoir fait cela, et en fonction du modèle de projet sélectionné lors de la création de l'application, si vous avez installé les applications insight et codeDom, vous devrez peut-être les désinstaller comme je l'ai fait. J'ai reçu une erreur de tableau qui remontait à Roslyn et Microsoft Application Insight.
Clarence
3

La mise à jour du .NET Framework vers sa dernière version (4.7.2) a résolu le problème. Merci à @Andrey Kovalenko pour la solution.

Mais l'erreur ne devrait-elle pas être comme,

entrez la description de l'image ici

Je ne suis pas sûr qu'informer chaque client de la mise à jour de son .NET Framework soit applicable. J'ai eu ce problème en particulier sur le système installé Windows Embedded OS , uniquement dans l'environnement de production.

Existe-t-il un autre moyen de surmonter le comportement, à partir de notre base de code elle-même.?

Naveen Kumar V
la source
1
Cibler l'ancien .NET Framework (profil client 4.0) pour mon projet et tous les projets DLL a également fonctionné. :)
Naveen Kumar V
2

J'essaye ces solutions sans succès.

La solution pour moi était d'aller au pool d'applications, de passer à 2.0, d'exécuter le site sur le navigateur, de voir l'erreur (car la version est erronée) et de revenir à 4.0 et "voilà", je l'ai, le site est ouvert.

Roberto Gentile
la source
2

Peut-être que c'est trop tard mais j'ai eu le même problème et corrigé comme ci-dessous. J'utilise Visual Studio 2015, la compilation de configuration sur web.config pointe vers .NET FrameWork 4.6 par défaut. Je ne pouvais pas simplement modifier uniquement le fichier web.config. Si vous ne pouvez pas installer .NET FrameWork 4.6 sur le serveur et que votre application ne l'utilise pas.

  1. Allez dans le menu Déboguer> Propriétés [Nom du projet]> Application.
  2. choisissez .NET Framework 4.5 (ou tout autre serveur prenant en charge et compatible votre application) dans la liste déroulante Target Framwork.
  3. Reconstruisez à nouveau.
waewta artpongsa
la source
0

Dans mon cas, j'avais une installation .NET corrompue sur mon Windows Server 2012 R2. J'ai dû installer une version plus récente de .NET (v4.7.1) et le site fonctionne maintenant.

André Hauptfleisch
la source
0

Dans mon cas, je n'ai pas accès à l'IIS lui-même et j'ai eu ce problème lorsque j'utilisais une méthode unique qui n'a rien de spécial uniquement à partir de .net 2.

La solution: j'ai extrait cette méthode et créé une bibliothèque de classes avec .net 2.0 et cela fonctionne.

Ricardo França
la source
0

J'ai rétrogradé la version 4.6.x à la version 4.5.2 et cela a bien fonctionné.

Bhavesh Patel
la source