Metode tidak ditemukan: '!! 0 [] System.Array.Empty ()'

123

Saya membuat aplikasi baru dengan VS 2015 RC dan template MVC dan tanpa memodifikasi baris kode apa pun, saya mengalami kesalahan ini:

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

Pertama kali terjadi pada saya, jadi saya terjebak saat ini

Luis Valencia
sumber
kemungkinan duplikat MVC 5 Bundle Error
ramiramilu

Jawaban:

232

Saya mengalami situasi ini di server produksi sementara di mesin pengembangan semuanya baik-baik saja.

Menginstal .NET Framework 4.6 pada mesin target telah memperbaiki masalah.

Andrey Kovalenko
sumber
46
SURAT BEBAN PC!
JeremyWeir
9
Terima kasih. Kemungkinan besar apa yang terjadi adalah: - Kode sedang dikompilasi terhadap .NET 4.6, di mana rakitan referensi menyertakan Array.Empty <T> (). - Kompilator Roslyn melihat bahwa Array.Empty <T> tersedia dan menggunakannya saat membuat larik kosong yang diperlukan untuk params. - Aplikasi yang dikompilasi mencoba berjalan di .NET 4.5 di mana Array.Empty tidak keluar.
wkalter
2
Server Windows 2008R2 kami harus memulai ulang satu kali setelah penginstalan.
Karl
2
Saat mencari jawaban, temukan utas ini yang memberikan lebih banyak latar belakang mengapa hal ini terjadi github.com/dotnet/roslyn/issues/4889
Reuven Abliyev
Saya telah menginstal .net461 tetapi masih memiliki kesalahan yang sama. Memasang net472 berhasil bagi saya
berniefitz
27

Maaf karena terlambat ke pesta, tetapi jika orang lain mendapat masalah ini melalui build TeamCity, saya dapat menjelaskan apa yang harus kami lakukan.

.NET 4.6 diinstal di server pembuatan kami (tetapi tidak di server aplikasi), dan RunnerType adalah Visual Studio (SLN) dan opsi Visual Studio ditetapkan ke 2015.

Ini memaksa build untuk menggunakan 4.6, dan saya perlu mengubah opsi Visual Studio ke 2013 untuk memaksa build menggunakan 4.5.2

gautejohan
sumber
5
Seorang kolega saya yang baik menunjukkan kepada saya bahwa Anda dapat membangun dengan Visual Studio 2015 jika agen pembuat Anda memiliki persyaratan DotNetFrameworkTargetingPack4.5.2_Path TeamCity kemudian akan membangun solusi menuju 4.5.2, bahkan jika 4.6 diinstal
gautejohan
2
Saya menyelesaikan masalah ini dengan menggunakan paket dev 4.5.2 seperti yang disarankan @gman. Dalam situasi di mana Anda tidak ingin menginstal 4.6, ini sepertinya solusi yang lebih baik.
Dougc
Bertanya setelah bertahun-tahun, ini untuk Anda @Dougc. Saya berada dalam situasi yang sama, saya tidak ingin menginstal 4.6 dan menginstal 4.5.2. Masih saya mendapatkan masalah ini. Apa yang disarankan gman ??
singsuyash
@singsuyash, dalam konfigurasi proyek, buka Persyaratan Agen. Di sana Anda klik tambahkan persyaratan baru. Ketik DotNetFrameworkTargetingPack4.5.2_Path di nama parameter dan setel kondisi agar ada.
gautejohan
11

Hanya Untuk orang lain yang menghadapi situasi ini:

jika Anda melihat di file web.config Anda akan menyadari bahwa di <compilation>tag Anda memiliki nilai yang targetFrameworkditetapkan ke versi di bawah 4.6. tetapi pada kenyataannya, pada saat pembuatan Anda menerbitkan aplikasi Anda melalui .NET FrameWork 4.6 atau lebih tinggi (Sesuai dengan ASP.NET MVC 4.6 dan yang lebih baru).

Jadi jika nilai diubah targetFrameworkmenjadi 4.6 error akan berubah bentuk menjadi:

Atribut 'targetFramework' saat ini merujuk ke versi yang lebih baru dari versi .NET Framework yang diinstal.

ini adalah kesalahan yang sebenarnya dan Anda akan menghilangkannya dengan menginstal Versi .Net FrameWork yang sesuai di lingkungan produksi Aplikasi Web Anda.

AmiNadimi
sumber
Namun, setelah Anda melakukan ini, dan bergantung pada template proyek yang dipilih saat aplikasi dibuat, jika Anda telah menginstal aplikasi insight dan codeDom, Anda mungkin harus menghapus instalannya seperti yang saya lakukan. Saya menerima kesalahan array yang ditelusuri kembali ke Roslyn dan Microsoft Application Insight.
Clarence
3

Memperbarui .NET Framework ke yang terbaru (4.7.2) menyelesaikan masalah. Terima kasih kepada @Andrey Kovalenko untuk solusinya.

Tapi seharusnya kesalahannya tidak seperti,

masukkan deskripsi gambar di sini

Saya tidak yakin memberi tahu setiap pelanggan tentang memperbarui .NET Framework mereka berlaku. Saya mengalami masalah ini terutama pada sistem yang diinstal Windows Embedded OS , hanya di lingkungan produksi.

Apakah ada cara lain untuk mengatasi perilaku tersebut, dari basis kode kita sendiri.?

Naveen Kumar V
sumber
1
Menargetkan .NET Framework (Profil Klien 4.0) yang lebih lama untuk proyek saya dan semua proyek DLL juga berfungsi. :)
Naveen Kumar V
2

Saya mencoba solusi ini tanpa hasil.

Solusi bagi saya adalah pergi ke pool aplikasi, putar ke 2.0, jalankan situs di browser, lihat kesalahan (karena versinya salah) dan kembali ke 4.0 dan "voilà", saya mengerti, situs web terbuka.

Roberto Gentile
sumber
2

Mungkin sudah terlambat tapi saya mendapat masalah yang sama dan diperbaiki seperti di bawah ini. Saya menggunakan Visual Studio 2015, kompilasi konfigurasi di web.config mengarah ke .NET FrameWork 4.6 secara default. Saya tidak bisa hanya mengedit hanya di file web.config. Jika Anda tidak dapat menginstal .NET FrameWork 4.6 di server dan aplikasi Anda tidak menggunakannya.

  1. Masuk ke menu Debug> Properti [Nama Proyek]> Aplikasi.
  2. pilih .NET Framework 4.5 (atau apa pun yang mendukung server dan kompatibel dengan aplikasi Anda) dari daftar tarik-turun Target Framwork.
  3. Bangun kembali.
waewta artpongsa
sumber
0

Dalam kasus saya, saya memiliki penginstalan .NET yang rusak di Windows Server 2012 R2. Saya harus menginstal versi yang lebih baru dari .NET (v4.7.1) dan situs tersebut berfungsi sekarang.

André Hauptfleisch
sumber
0

Dalam kasus saya, saya tidak memiliki akses ke IIS itu sendiri dan saya mengalami masalah ini ketika saya menggunakan satu metode yang tidak memiliki sesuatu yang khusus hanya dari .net 2.

Solusinya: Saya telah mengekstrak metode itu dan membuat Perpustakaan Kelas dengan .net 2.0 dan berhasil.

Ricardo França
sumber
0

Saya telah menurunkan versi 4.6.x menjadi 4.5.2 dan itu berfungsi dengan baik.

Bhavesh Patel
sumber