Метод не знайдено: '!! 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

Перший раз це трапляється зі мною, тому я застряг на даний момент


можливий дублікат MVC 5 Bundle Error
ramiramilu

Відповіді:


232

У мене така ситуація була на виробничому сервері, тоді як на машині розвитку все було нормально.

Встановлення .NET Framework 4.6 на цільовій машині усунула проблему.


46
ПІСЛЯ ЗАВАНТАЖЕННЯ ПК!
JeremyWeir

9
Дякую. Найімовірніше, що відбувається так: - Код компілюється проти .NET 4.6, де довідкові збірки включають Array.Empty <T> (). - Компілятор Roslyn бачить, що Array.Empty <T> доступний, і тому використовує його під час генерації порожнього масиву, необхідного для парам. - Скомпільований додаток намагається запустити на .NET 4.5, де Array.Empty не виходить.
wkalter

2
Наш сервер Windows 2008R2 повинен був перезапустити один раз після встановлення.
Карл

2
Шукаючи відповіді, знайшов цю тему, яка дає ще декілька підстав, чому це відбувається github.com/dotnet/roslyn/isissue/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 Dev, як запропонував @gman. У ситуаціях, коли ви не хочете встановити 4.6, це здається кращим рішенням.
Дугк

Запитуючи через багато років, це для вас @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 у виробничому середовищі свого веб-програми.


Однак після того, як ви це зробите та залежно від шаблону проекту, обраного під час створення програми, якщо у вас встановлені програми insight та codeDom, можливо, доведеться видалити їх, як і я. Я отримав помилку масиву, яка відслідковується до Росліна та Microsoft Application Insight.
Кларенс

3

Оновлення .NET Framework до останнього (4.7.2) вирішило проблему. Дякую @Andrey Коваленко за рішення.

Але хіба помилка не повинна бути такою,

введіть тут опис зображення

Я не впевнений, що розповідаю кожному клієнту про оновлення .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. Перейдіть у меню Налагодження> [Назва проекту] Властивості> Застосування.
  2. виберіть .NET Framework 4.5 (або будь-який сервер, який підтримує та сумісний із вашою програмою) зі спадного списку Target Framwork.
  3. Відновіть знову.

0

У моєму випадку у мене була пошкоджена .NET-установка на моєму Windows Server 2012 R2. Мені довелося встановити більш нову версію .NET (v4.7.1), і сайт працює зараз.


0

У моєму випадку я не маю доступу до самого IIS, і у мене була ця проблема, коли я використовував єдиний метод, який не має нічого особливого, лише речі з .net 2.

Рішення: Я вилучив цей метод і створив бібліотеку класів з .net 2.0, і він працює.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.