Không tìm thấy phương thức: '!! 0 [] System.Array.Empty ()'


123

Tôi đã tạo một ứng dụng mới với VS 2015 RC và mẫu MVC và không sửa đổi bất kỳ dòng mã nào, tôi gặp lỗi này:

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

Lần đầu tiên nó xảy ra với tôi, vì vậy tôi đang bị mắc kẹt vào lúc này


có thể trùng lặp của MVC 5 Bundle Lỗi
ramiramilu

Câu trả lời:


232

Tôi đã gặp tình huống này trên máy chủ sản xuất trong khi trên máy phát triển mọi thứ đều ổn.

Cài đặt .NET Framework 4.6 trên máy đích đã khắc phục được sự cố.


46
THƯ TẢI MÁY TÍNH!
JeremyWeir

9
Cảm ơn bạn. Rất có thể những gì đang xảy ra là: - Mã đang biên dịch dựa trên .NET 4.6, trong đó các hội đồng tham chiếu bao gồm Array.Empty <T> (). - Trình biên dịch Roslyn thấy rằng Array.Empty <T> có sẵn và do đó sử dụng nó khi tạo mảng trống cần thiết cho các tham số. - Ứng dụng đã biên dịch đang cố gắng chạy trên .NET 4.5 trong đó Array.Empty không thoát.
wkalter

2
Máy chủ Windows 2008R2 của chúng tôi phải khởi động lại một lần sau khi cài đặt.
Karl

2
Khi tìm kiếm câu trả lời tìm thấy chủ đề này mang đến cho một số nền tảng hơn tại sao điều này xảy ra là github.com/dotnet/roslyn/issues/4889
Reuven Abliyev

Tôi đã cài đặt .net461 nhưng vẫn bị lỗi tương tự. Net472 cài đặt đã làm các trick cho tôi
berniefitz

27

Xin lỗi vì đã đến bữa tiệc muộn, nhưng trong trường hợp ai đó gặp sự cố này thông qua bản dựng TeamCity, tôi có thể mô tả những gì chúng tôi phải làm.

.NET 4.6 đã được cài đặt trên máy chủ xây dựng của chúng tôi (nhưng không phải trên máy chủ ứng dụng) và RunnerType là Visual Studio (sln) và tùy chọn Visual Studio được đặt thành 2015.

Điều này buộc bản dựng phải sử dụng 4.6 và tôi cần thay đổi tùy chọn Visual Studio thành 2013 để buộc bản dựng sử dụng 4.5.2


5
Một đồng nghiệp tốt của tôi chỉ ra cho tôi rằng bạn có thể xây dựng với Visual Studio 2015 nếu đại lý xây dựng của bạn có yêu cầu DotNetFrameworkTargetingPack4.5.2_Path TeamCity sau đó sẽ xây dựng các giải pháp đối với 4.5.2, ngay cả khi 4.6 được cài đặt
gautejohan

2
Tôi đã giải quyết vấn đề này bằng cách sử dụng gói nhà phát triển 4.5.2 như @gman đã đề xuất. Trong trường hợp bạn không muốn cài đặt 4.6, đây có vẻ là một giải pháp tốt hơn.
Dougc

Hỏi sau nhiều năm, cái này là của bạn @Dougc. Tôi đang ở trong một tình huống tương tự, tôi không muốn cài đặt 4.6 và tôi đã cài đặt 4.5.2. Tôi vẫn nhận được vấn đề này. Gman đề nghị là gì vậy ??
singsuyash

@singsuyash, trong cấu hình dự án, chuyển đến Yêu cầu tác nhân. Ở đó bạn nhấp vào thêm yêu cầu mới. Nhập DotNetFrameworkTargetingPack4.5.2_Path vào tên thông số và đặt điều kiện tồn tại.
gautejohan

11

Chỉ dành cho những người khác gặp phải tình huống này:

nếu bạn nhìn vào tệp web.config, bạn sẽ nhận ra rằng trong <compilation>thẻ bạn có giá trị targetFrameworkđược đặt thành phiên bản dưới 4,6. nhưng trên thực tế, tại thời điểm xây dựng, bạn đã xuất bản ứng dụng của mình qua .NET FrameWork 4.6 trở lên (Tương ứng với ASP.NET MVC 4.6 trở lên).

Vì vậy, nếu bạn thay đổi giá trị targetFrameworkthành 4,6, lỗi sẽ thay đổi hình dạng thành:

Thuộc tính 'targetFramework' hiện tham chiếu đến phiên bản mới hơn phiên bản .NET Framework đã cài đặt.

đây là lỗi thực sự và bạn sẽ loại bỏ nó bằng cách cài đặt Phiên bản .Net FrameWork thích hợp trong môi trường sản xuất của Ứng dụng web của bạn.


Tuy nhiên, sau khi bạn thực hiện việc này, và tùy thuộc vào mẫu dự án được chọn khi tạo ứng dụng, nếu bạn đã cài đặt ứng dụng thông tin chi tiết và codeDom, bạn có thể phải gỡ cài đặt chúng như tôi đã làm. Tôi đã nhận được lỗi mảng bắt nguồn từ roslyn và Microsoft Application Insight.
Clarence 16/1017

3

Cập nhật .NET Framework lên phiên bản mới nhất (4.7.2) đã giải quyết được sự cố. Cảm ơn @Andrey Kovalenko về giải pháp.

Nhưng không phải lỗi như thế,

nhập mô tả hình ảnh ở đây

Tôi không chắc việc nói với từng khách hàng về việc cập nhật .NET Framework của họ có thể áp dụng được hay không. Tôi đã gặp sự cố này đặc biệt là ở hệ thống được cài đặt Windows Embedded OS , chỉ ở môi trường sản xuất.

Có cách nào khác để khắc phục hành vi, từ chính cơ sở mã của chúng tôi không.?


1
Nhắm mục tiêu .NET Framework cũ hơn (Hồ sơ khách hàng 4.0) cho dự án của tôi và tất cả các dự án DLL cũng hoạt động. :)
Naveen Kumar V

2

Tôi thử những giải pháp này mà không thành công.

Giải pháp cho tôi là vào pool ứng dụng, chuyển sang 2.0, thực thi trang web trên trình duyệt, thấy lỗi (do phiên bản bị sai) và quay trở lại 4.0 và "voilà", tôi hiểu rồi, trang web mở.


2

Có lẽ đã quá muộn nhưng tôi đã gặp sự cố tương tự và được khắc phục như bên dưới. Tôi sử dụng Visual Studio 2015, biên dịch cấu hình trên web.config trỏ đến .NET FrameWork 4.6 theo mặc định. Tôi không thể chỉ chỉnh sửa trên tệp web.config. Nếu bạn không thể cài đặt .NET FrameWork 4.6 trên máy chủ và ứng dụng của bạn không sử dụng nó.

  1. Chuyển đến menu Gỡ lỗi> Thuộc tính [Tên dự án]> Ứng dụng.
  2. chọn .NET Framework 4.5 (hoặc bất kỳ máy chủ nào hỗ trợ và tương thích với ứng dụng của bạn) từ danh sách thả xuống Target Framwork.
  3. Xây dựng lại một lần nữa.

0

Trong trường hợp của tôi, tôi đã cài đặt .NET bị hỏng trên Windows Server 2012 R2. Tôi đã phải cài đặt phiên bản .NET mới hơn (v4.7.1) và trang web hiện đang hoạt động.


0

Trong trường hợp của tôi, tôi không có quyền truy cập vào chính IIS và tôi đã gặp sự cố này khi tôi đang sử dụng một phương pháp duy nhất không có bất kỳ điều gì đặc biệt chỉ có những thứ từ .net 2.

Giải pháp: Tôi đã giải nén phương pháp đó và tạo Thư viện lớp với .net 2.0 và nó hoạt động.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.