ไม่พบเมธอด: '!! 0 [] System.Array.Empty ()'


123

ฉันสร้างแอปใหม่ด้วย VS 2015 RC และเทมเพลต MVC และไม่ได้แก้ไขโค้ดบรรทัดใด ๆ ฉันมีข้อผิดพลาดนี้:

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

ครั้งแรกมันเกิดขึ้นกับฉันดังนั้นฉันจึงติดอยู่ในขณะนี้


คำตอบ:


232

ฉันมีสถานการณ์นี้บนเซิร์ฟเวอร์การผลิตในขณะที่อยู่บนเครื่องพัฒนาทุกอย่างก็โอเค

การติดตั้ง. NET Framework 4.6 บนเครื่องเป้าหมายได้แก้ไขปัญหาแล้ว


46
PC LOAD LETTER!
JeremyWeir

9
ขอบคุณ. สิ่งที่เกิดขึ้นส่วนใหญ่คือ: - โค้ดกำลังคอมไพล์เทียบกับ. NET 4.6 โดยที่ชุดอ้างอิงประกอบด้วย Array.Empty <T> () - คอมไพเลอร์ Roslyn เห็นว่า Array.Empty <T> พร้อมใช้งานดังนั้นจึงใช้เมื่อสร้างอาร์เรย์ว่างที่จำเป็นสำหรับพารามิเตอร์ - แอพที่คอมไพล์แล้วพยายามรันบน. NET 4.5 โดยที่ Array.Empty ไม่ออก
wkalter

2
Windows 2008R2 Server ของเราต้องรีสตาร์ทหนึ่งครั้งหลังการติดตั้ง
Karl

2
เมื่อต้องการคำตอบพบว่าหัวข้อนี้ให้ข้อมูลเพิ่มเติมว่าทำไมสิ่งนี้จึงเกิดขึ้นgithub.com/dotnet/roslyn/issues/4889
Reuven Abliyev

ฉันติดตั้ง. net461 แล้ว แต่ยังมีข้อผิดพลาดเหมือนเดิม การติดตั้ง net472 เป็นเคล็ดลับสำหรับฉัน
berniefitz

27

ขออภัยที่มางานปาร์ตี้ช้า แต่ในกรณีที่มีคนอื่นได้รับปัญหานี้ผ่านทางบิลด์ TeamCity ฉันสามารถอธิบายสิ่งที่เราต้องทำ

.NET 4.6 ได้รับการติดตั้งบนเซิร์ฟเวอร์การสร้างของเรา (แต่ไม่ใช่บนแอปพลิเคชันเซิร์ฟเวอร์) และ RunnerType คือ Visual Studio (sln) และตัวเลือก Visual Studio ถูกตั้งค่าเป็น 2015

สิ่งนี้บังคับให้บิลด์ใช้ 4.6 และฉันจำเป็นต้องเปลี่ยนตัวเลือก Visual Studio เป็น 2013 เพื่อบังคับให้บิลด์ใช้ 4.5.2


5
เพื่อนร่วมงานที่ดีของฉันชี้ให้ฉันเห็นว่าคุณสามารถสร้างด้วย Visual Studio 2015 ได้หากตัวแทนการสร้างของคุณมีข้อกำหนด DotNetFrameworkTargetingPack4.5.2_Path TeamCity จะสร้างโซลูชันไปสู่ ​​4.5.2 แม้ว่าจะติดตั้ง 4.6 ก็ตาม
gautejohan

2
ฉันแก้ไขปัญหานี้โดยใช้ชุดพัฒนา 4.5.2 ตามที่ @gman แนะนำ ในสถานการณ์ที่คุณไม่ต้องการติดตั้ง 4.6 สิ่งนี้ดูเหมือนจะเป็นทางออกที่ดีกว่า
Dougc

หลังจากผ่านไปหลายปีนี่ก็เพื่อคุณ @Dougc ฉันอยู่ในสถานการณ์ที่คล้ายกันฉันไม่ต้องการติดตั้ง 4.6 และฉันติดตั้ง 4.5.2 แล้ว ฉันยังคงได้รับปัญหานี้ gman แนะนำว่าไง ??
singsuyash

@singsuyash ในการกำหนดค่าโครงการไปที่ข้อกำหนดของตัวแทน คุณคลิกเพิ่มข้อกำหนดใหม่ พิมพ์ DotNetFrameworkTargetingPack4.5.2_Path ในชื่อพารามิเตอร์และกำหนดเงื่อนไขให้มีอยู่
gautejohan

11

สำหรับคนอื่น ๆ ที่เผชิญสถานการณ์นี้:

หากคุณดูในไฟล์ web.config คุณจะรู้ว่าใน<compilation>แท็กคุณมีค่าที่targetFrameworkกำหนดเป็นเวอร์ชันต่ำกว่า 4.6 แต่ในความเป็นจริงในเวลาสร้างคุณเผยแพร่แอปพลิเคชันของคุณผ่าน. NET FrameWork 4.6 ขึ้นไป (สอดคล้องกับ ASP.NET MVC 4.6 ขึ้นไป)

ดังนั้นหากคุณเปลี่ยนค่าtargetFrameworkเป็น 4.6 ข้อผิดพลาดจะเปลี่ยนรูปร่างเป็น:

ขณะนี้แอตทริบิวต์ "targetFramework" อ้างถึงเวอร์ชันที่ช้ากว่าเวอร์ชันที่ติดตั้งของ. NET Framework

นี่เป็นข้อผิดพลาดจริงและคุณจะกำจัดมันโดยการติดตั้ง. Net FrameWork เวอร์ชันที่เหมาะสมในสภาพแวดล้อมการใช้งานจริงของเว็บแอพของคุณ


อย่างไรก็ตามหลังจากที่คุณทำสิ่งนี้และขึ้นอยู่กับเทมเพลตโครงการที่เลือกเมื่อสร้างแอปพลิเคชันหากคุณมีข้อมูลเชิงลึกและแอปพลิเคชัน codeDom ติดตั้งคุณอาจต้องถอนการติดตั้งเหมือนที่ฉันทำ ฉันได้รับข้อผิดพลาดของอาร์เรย์ซึ่งย้อนกลับไปที่ roslyn และ Microsoft Application Insight
Clarence

3

การอัปเดต. NET Framework เป็นเวอร์ชันล่าสุด (4.7.2) ช่วยแก้ปัญหาได้ ขอบคุณ @Andrey Kovalenko สำหรับวิธีแก้ปัญหา

แต่ข้อผิดพลาดไม่ควรเป็นเช่น

ใส่คำอธิบายภาพที่นี่

ฉันไม่แน่ใจว่าจะแจ้งลูกค้าแต่ละรายเกี่ยวกับการอัปเดต. NET Framework ของตน ฉันมีปัญหานี้โดยเฉพาะที่ระบบที่ติดตั้งWindows Embedded OSเฉพาะที่สภาพแวดล้อมการผลิต

มีวิธีอื่นในการเอาชนะพฤติกรรมจากฐานรหัสของเราหรือไม่?


1
การกำหนดเป้าหมาย. NET Framework ที่เก่ากว่า(โปรไฟล์ไคลเอนต์ 4.0)สำหรับโครงการของฉันและโครงการ DLL ทั้งหมดก็ใช้ได้เช่นกัน :)
Naveen Kumar V

2

ฉันลองวิธีแก้ปัญหาเหล่านี้แล้วไม่ประสบความสำเร็จ

วิธีแก้ปัญหาสำหรับฉันคือไปที่แอปพลิเคชันพูลเปลี่ยนเป็น 2.0 รันไซต์บนเบราว์เซอร์ดูข้อผิดพลาด (เนื่องจากเวอร์ชันไม่ถูกต้อง) และเปลี่ยนกลับเป็น 4.0 และ "voilà" ฉันเข้าใจแล้วเว็บไซต์เปิดขึ้น


2

อาจจะสายเกินไป แต่ฉันพบปัญหาเดียวกันและได้รับการแก้ไขดังต่อไปนี้ ฉันใช้ Visual Studio 2015 การคอมไพล์การกำหนดค่าบน web.config ชี้ไปที่. NET FrameWork 4.6 ตามค่าเริ่มต้น ฉันไม่สามารถแก้ไขเฉพาะไฟล์ web.config เท่านั้น หากคุณไม่สามารถติดตั้ง. NET FrameWork 4.6 บนเซิร์ฟเวอร์และแอปพลิเคชันของคุณไม่ได้ใช้งาน

  1. ไปที่เมนู Debug> [Project Name] Properties> Application
  2. เลือก. NET Framework 4.5 (หรือเซิร์ฟเวอร์ใดที่รองรับและเข้ากันได้กับแอปพลิเคชันของคุณ) จากรายการแบบเลื่อนลง Target Framwork
  3. สร้างใหม่อีกครั้ง

0

ในกรณีของฉันฉันมีการติดตั้ง. NET ที่เสียหายบน Windows Server 2012 R2 ของฉัน ฉันต้องติดตั้ง. NET (v4.7.1) เวอร์ชันล่าสุดและไซต์ใช้งานได้แล้ว


0

ในกรณีของฉันฉันไม่สามารถเข้าถึง IIS ได้และฉันประสบปัญหานี้เมื่อฉันใช้วิธีการเดียวซึ่งไม่มีอะไรพิเศษเฉพาะจาก. net 2

วิธีแก้ปัญหา: ฉันได้แยกวิธีการนั้นและสร้าง Class Library ด้วย. net 2.0 แล้วและใช้งานได้


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.