Nie znaleziono metody: „!! 0 [] System.Array.Empty ()”


124

Utworzyłem nową aplikację z VS 2015 RC i szablonem MVC i bez modyfikowania żadnej linii kodu mam ten błąd:

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

Pierwszy raz mi się to zdarza, więc w tej chwili utknąłem


możliwy duplikat błędu pakietu MVC 5
ramiramilu

Odpowiedzi:


232

Miałem taką sytuację na serwerze produkcyjnym, podczas gdy na komputerze deweloperskim wszystko było w porządku.

Zainstalowanie .NET Framework 4.6 na komputerze docelowym rozwiązało problem.


46
ZAŁADUJ LIST PC!
JeremyWeir

9
Dziękuję Ci. Najprawdopodobniej dzieje się tak: - kod jest kompilowany względem platformy .NET 4.6, gdzie zestawy referencyjne obejmują Array.Empty <T> (). - Kompilator Roslyn widzi, że Array.Empty <T> jest dostępny i używa go podczas generowania pustej tablicy potrzebnej dla parametrów. - Skompilowana aplikacja próbuje działać na platformie .NET 4.5, gdzie Array.Empty nie kończy pracy.
wkalter

2
Nasz serwer Windows 2008R2 musiał zostać ponownie uruchomiony po instalacji.
Karl

2
Szukając odpowiedzi, znalazłem ten wątek, który daje więcej informacji na temat tego, dlaczego tak się dzieje github.com/dotnet/roslyn/issues/4889
Reuven Abliyev

Zainstalowałem .net461, ale nadal miałem ten sam błąd. Zainstalowanie net472 załatwiło mi
sprawę

27

Przepraszam, że spóźniłem się na imprezę, ale na wypadek, gdyby ktoś inny dostał ten problem poprzez kompilację TeamCity, mogę opisać, co musieliśmy zrobić.

NET 4.6 została zainstalowana na naszym serwerze kompilacji (ale nie na serwerze aplikacji), a RunnerType to Visual Studio (sln), a opcja Visual Studio została ustawiona na 2015.

To zmusiło kompilację do korzystania z wersji 4.6 i musiałem zmienić opcję programu Visual Studio na 2013, aby wymusić na kompilacji korzystanie z wersji 4.5.2


5
Mój dobry kolega zwrócił mi uwagę, że można budować w programie Visual Studio 2015, jeśli agent kompilacji ma wymaganie DotNetFrameworkTargetingPack4.5.2_Path TeamCity zbuduje rozwiązanie w kierunku 4.5.2, nawet jeśli jest zainstalowany 4.6
gautejohan

2
Rozwiązałem ten problem, używając pakietu deweloperskiego 4.5.2, zgodnie z sugestią @gman. W sytuacjach, w których nie chcesz mieć zainstalowanej wersji 4.6, wydaje się to lepszym rozwiązaniem.
Dougc

Pytając po wielu latach, to dla Ciebie @Dougc. Jestem w podobnej sytuacji, nie chcę mieć zainstalowanej wersji 4.6 i mam zainstalowaną wersję 4.5.2. Nadal mam ten problem. Co takiego zasugerował Gman?
singsuyash

@singsuyash, w konfiguracji projektu przejdź do wymagań agenta. Tam kliknij dodaj nowe wymaganie. Wpisz DotNetFrameworkTargetingPack4.5.2_Path w nazwie parametru i ustaw warunek na istnienie.
gautejohan

11

Tylko dla innych w tej sytuacji:

jeśli zajrzysz do pliku web.config, zauważysz, że w <compilation>tagu masz targetFrameworkustawioną wartość na wersję poniżej 4.6. ale w rzeczywistości w czasie kompilacji aplikacja została opublikowana za pośrednictwem platformy .NET FrameWork w wersji 4.6 lub nowszej (odpowiada ASP.NET MVC 4.6 i nowszych).

Więc jeśli zmienisz wartość targetFrameworkna 4,6, błąd zmieni kształt na:

Atrybut „targetFramework” obecnie odwołuje się do wersji nowszej niż zainstalowana wersja platformy .NET Framework.

to jest prawdziwy błąd i pozbędziesz się go instalując odpowiednią wersję .Net FrameWork w środowisku produkcyjnym swojej aplikacji internetowej.


Jednak po wykonaniu tej czynności, w zależności od szablonu projektu wybranego podczas tworzenia aplikacji, jeśli masz zainstalowane aplikacje insight i codeDom, może być konieczne ich odinstalowanie, tak jak ja. Otrzymałem błąd tablicy, który dotarł do Roslyn i Microsoft Application Insight.
Clarence,

3

Zaktualizowanie programu .NET Framework do najnowszej wersji (4.7.2) rozwiązało problem. Podziękowania dla @Andrey Kovalenko za rozwiązanie.

Ale czy błąd nie powinien wyglądać następująco:

wprowadź opis obrazu tutaj

Nie jestem pewien, czy mówienie każdemu klientowi o aktualizacji ich .NET Framework ma zastosowanie. Miałem ten problem szczególnie w systemie Windows Embedded OS , tylko w środowisku produkcyjnym.

Czy istnieje inny sposób na pokonanie tego zachowania, z naszej bazy kodu?


1
Kierowanie na starszą platformę .NET Framework (profil klienta 4.0) dla mojego projektu i wszystkich projektów DLL również działało. :)
Naveen Kumar V

2

Próbuję tego rozwiązania bez powodzenia.

Rozwiązaniem dla mnie było przejście do puli aplikacji, przejście na 2.0, uruchomienie strony w przeglądarce, zobaczenie błędu (bo wersja jest zła) i powrót do 4.0 i "voila", mam to, strona otwarta.


2

Może za późno, ale mam ten sam problem i naprawiłem jak poniżej. Używam Visual Studio 2015, kompilacja konfiguracji na web.config wskazuje domyślnie na .NET FrameWork 4.6. Nie mogłem po prostu edytować tylko w pliku web.config. Jeśli nie możesz zainstalować .NET FrameWork 4.6 na serwerze, a Twoja aplikacja go nie używa.

  1. Przejdź do menu Debugowanie> [Nazwa projektu] Właściwości> Aplikacja.
  2. wybierz .NET Framework 4.5 (lub dowolny serwer obsługujący i kompatybilny z twoją aplikacją) z rozwijanej listy Target Framwork.
  3. Odbuduj ponownie.

0

W moim przypadku mam uszkodzoną instalację .NET na moim Windows Server 2012 R2. Musiałem zainstalować nowszą wersję .NET (v4.7.1) i strona działa teraz.


0

W moim przypadku nie mam dostępu do samego IIS i miałem ten problem, gdy używałem jednej metody, która nie ma nic specjalnego tylko z .net 2.

Rozwiązanie: wyodrębniłem tę metodę i utworzyłem bibliotekę klas z .net 2.0 i działa.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.