Метод не найден: '!! 0 [] System.Array.Empty ()'

124

Я создал новое приложение с 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
ПИСЬМО ЗАГРУЗИТЬ ПК!
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/issues/4889
Реувен Аблиев
Я установил .net461, но по-прежнему имел ту же ошибку. Установка net472 сработала для меня
berniefitz
27

Извините за опоздание на вечеринку, но в случае, если кто-то другой столкнется с этой проблемой через сборку TeamCity, я могу описать, что нам нужно было сделать.

.NET 4.6 был установлен на нашем сервере сборки (но не на сервере приложений), RunnerType был Visual Studio (sln), а для параметра Visual Studio было установлено значение 2015.

Это заставило сборку использовать 4.6, и мне нужно было изменить параметр Visual Studio на 2013, чтобы заставить сборку использовать 4.5.2.

gautejohan
источник
5
Мой хороший коллега указал мне, что вы можете построить с помощью Visual Studio 2015, если ваш агент сборки требует, чтобы DotNetFrameworkTargetingPack4.5.2_Path TeamCity затем построит решение для версии 4.5.2, даже если установлена
версия
2
Я решил эту проблему, используя пакет разработчика 4.5.2, предложенный @gman. В ситуациях, когда вы не хотите устанавливать 4.6, это кажется лучшим решением.
Dougc 09
Спрашивая спустя много лет, это для вас @Dougc. У меня аналогичная ситуация, я не хочу, чтобы 4.6 была установлена, а у меня установлена ​​4.5.2. Тем не менее я получаю эту проблему. Что предложил gman ??
singsuyash
@singsuyash, в конфигурации проекта перейдите в раздел Требования к агенту. Там вы нажимаете добавить новое требование. Введите DotNetFrameworkTargetingPack4.5.2_Path в имя параметра и задайте условие существования.
гаутейохан
11

Только для тех, кто сталкивается с этой ситуацией:

если вы посмотрите в файл web.config, вы поймете, что в <compilation>теге у вас установлено значение targetFrameworkверсии ниже 4.6. но на самом деле во время сборки вы опубликовали свое приложение через .NET FrameWork 4.6 или выше (соответствует ASP.NET MVC 4.6 и выше).

Поэтому, если вы измените значение targetFrameworkна 4.6, ошибка изменится на:

Атрибут targetFramework в настоящее время ссылается на более позднюю версию, чем установленная версия .NET Framework.

это настоящая ошибка, и вы избавитесь от нее, установив соответствующую версию .Net FrameWork в производственной среде вашего веб-приложения.

AmiNadimi
источник
Однако после этого и в зависимости от шаблона проекта, выбранного при создании приложения, если у вас установлены приложения Insight и codeDom, вам, возможно, придется удалить их, как это сделал я. Я получил ошибку массива, которая восходит к roslyn и Microsoft Application Insight.
Кларенс,
3

Обновление .NET Framework до последней версии (4.7.2) решило проблему. Спасибо @Andrey Kovalenko за решение.

Но не должна ли ошибка быть такой,

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

Я не уверен, что можно сказать каждому клиенту об обновлении их .NET Framework. У меня была эта проблема, особенно в системе с установленной ОС Windows Embedded , только в производственной среде.

Есть ли другой способ преодолеть такое поведение, исходя из самой базы кода?

Навин Кумар V
источник
1
Таргетинг на более старую платформу .NET Framework (профиль клиента 4.0) для моего проекта и всех проектов DLL также работал. :)
Naveen Kumar V
2

Я пробую это решение безуспешно.

Решение для меня заключалось в том, чтобы перейти в пул приложений, перейти на 2.0, запустить сайт в браузере, увидеть ошибку (потому что версия неправильная) и вернуться на 4.0 и "вуаля", я понял, веб-сайт открыт.

Роберто Джентиле
источник
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. Восстановите снова.
Waewta Artpongsa
источник
0

В моем случае у меня была поврежденная установка .NET на моем Windows Server 2012 R2. Мне пришлось установить более свежую версию .NET (v4.7.1), и сейчас сайт работает.

Андре Хауптфляйш
источник
0

В моем случае у меня нет доступа к самому IIS, и у меня возникла эта проблема, когда я использовал единственный метод, в котором нет ничего особенного, только вещи из .net 2.

Решение: я извлек этот метод и создал библиотеку классов с .net 2.0, и она работает.

Рикардо Франса
источник
0

Я понизил 4.6.x до 4.5.2, и он работал нормально.

Бхавеш Патель
источник