Pembaruan Windows menyebabkan MVC3 dan MVC4 berhenti bekerja


126

Apakah saya satu-satunya yang menginstal Pembaruan Windows (8.1) pada 15 Oktober, dan tiba-tiba MVC berhenti bekerja karena peringatan ini?

Peringatan 1 Tidak dapat menyelesaikan referensi ini. Tidak dapat menemukan lokasi perakitan "System.Web.Mvc, Versi = 4.0.0.0, Budaya = netral, PublicKeyToken = 31bf3856ad364e35, processorArchitecture = MSIL". Periksa untuk memastikan rakitan ada pada disk. Jika referensi ini diperlukan oleh kode Anda, Anda mungkin mendapatkan kesalahan kompilasi.

Tampaknya pembaruan windows ini menginstal versi MVC yang lebih baru dengan nomor versi 4.0.0.1, dan menghapus versi lama dari folder file program.

Seseorang tahu bagaimana cara memperbaikinya tanpa merangkak untuk setiap proyek?


Dari mana asalnya? GAC? Majelis referensi atau nuget?
blowdart

1
Baca blog Microsoft tentang masalah ini. (Terima kasih kepada e4rthdog untuk menautkan ini, hanya berkomentar untuk mendapatkan lebih banyak visibilitas)
Hanna



1
Ingatlah bahwa Anda harus mengedit web.config di lingkungan produksi Anda juga.
Kapten Kenpachi

Jawaban:


107

Solusi terbaik adalah memperbarui DLL ke versi 4.0.0.1. Coba gunakan nuget:

Install-Package Microsoft.AspNet.Mvc -Version 4.0.40804 -Project <your project name>

Ini akan secara otomatis diperbarui

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.1" newVersion="4.0.0.1" />
  </dependentAssembly>

Anda hanya perlu mengedit versi System.Web.Mvc secara manual di:

<compilation debug="true" targetFramework="4.0">
  <assemblies>
    <add assembly="System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />


1
Ya, ganti saja referensi GAC dengan referensi NuGet. Bekerja untuk kita.
abatishchev

7
Baca blog Microsoft tentang masalah ini. (Terima kasih kepada e4rthdog untuk menautkan ini, hanya berkomentar untuk mendapatkan lebih banyak visibilitas)
Hanna

10
Tahu mengapa, setelah melakukan hal di atas, saya mendapatkan sejumlah peringatan ini: "ASPNETCOMPILER: peringatan CS1702: Dengan asumsi referensi perakitan 'System.Web.Mvc, Versi = 4.0.0.0, Budaya = netral, PublicKeyToken = 31bf3856ad364e35' cocok ' System.Web.Mvc, Versi = 4.0.0.1, Budaya = netral, PublicKeyToken = 31bf3856ad364e35 ', Anda mungkin perlu menyediakan kebijakan runtime "?
Farinha

1
@Farinha, saya memiliki peringatan yang sama. Saya tidak bisa membawanya pergi. Peringatan ini membunuh kinerja pembangunan. Apakah Anda menemukan cara untuk memperbaikinya?
StefanHa

3
Tidak @StefanHa, belum menemukan perbaikan. Saya perhatikan ada banyak referensi untuk 4.0.0.0 di seluruh aplikasi, di file Web.config di dalam folder Views, tetapi bahkan setelah secara manual mengubah semua peringatan tetap ada.
Farinha

26

Kami harus menyentuh secara manual masing-masing .csproj untuk memperbarui versi dari 4.0.0.0 ke 4.0.0.1 untuk membuat build kami berjalan. Cukup menyakitkan.

Referensi baru akan terlihat seperti:

<Reference Include="System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

3
Perhatikan perubahan yang sama diperlukan untuk MVC 3.0, referensi harus "3.0.0.1" untuk membuatnya bekerja lagi.
Andy

Dalam kasus saya ini diperlukan, dan juga perlu menunjukkan bahwa "Versi Spesifik" adalah "Benar"
pimbrouwers

24

Punya masalah yang sama setelah pembaruan:

Pembaruan Keamanan untuk Microsoft ASP.NET MVC 4.0 (KB2993928)
http://support.microsoft.com/kb/2993928

Tetapi hanya untuk proyek dengan referensi ke System.Web.Mvc, tidak diinstal oleh paket.

Rekan saya, yang belum menginstal Microsoft ASP.NET MVC 4.0 Runtime dan tidak menerima pembaruan, tidak mengalami masalah dan masih merujuk ke 4.0.0.0, bukan ke 4.0.0.1

Saya secara manual mengubah referensi ke 4.0.0 . 1 , setelah check-in, kolega saya masih bisa membangun dengan referensi ke 4.0.0. 0 .
(Bekerja keduanya pada Win7 Pro SP1, VS2013 Pro Update 3)


22

Silakan lihat blog ini, cara yang disarankan adalah memperbarui paket NuGet yang sesuai:

http://blogs.msdn.com/b/webdev/archive/2014/10/16/microsoft-asp-net-mvc-security-update-broke-my-build.aspx

Kutipan:

Masalahnya dapat diatasi dengan menerapkan salah satu solusi berikut:

  1. (Lebih disukai) Instal Microsoft.AspNet.Mvc dari galeri NuGet (ini akan menginstal pengalihan yang mengikat di web.config Anda). Anda dapat melakukan ini dari manajer paket NuGet atau konsol NuGet di dalam Visual Studio:

    Instal-Paket Microsoft.AspNet.Mvc -Versi-PROJECTNAME Proyek

    Versi MVC 4: 4.0.40804.0

    Versi MVC 3: 3.0.50813.1

  2. Perbarui referensi untuk System.Web.MVC.dll secara manual (jangan gunakan yang ada di GAC).

    Coba Tambahkan Referensi -> Assemblies -> kotak dialog Extensions.



4

Untuk proyek web, Anda mungkin harus memperbarui konfigurasi di web.config juga:

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.1"/>
  </dependentAssembly>

2

Anda perlu mengubah semua referensi ke System.Web.Mvc dalam solusi Anda. Hapus saja dan tambahkan versi 4.0.0.1 yang baru.

Juga dalam perubahan properti copy local menjadi true.

Dan di web.config tambahkan ikatan yang mengikat untuk menunjuk ke versi baru dari MVC:

    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
                <bindingRedirect oldVersion="0.0.0.0-4.0.0.1" newVersion="4.0.0.1" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>

Pengaturan CopyLocal=truetidak membantu kami; lihat: System.Web.MVCtidak disalin ke binfolder sejak MS14-059
Danny Tuppeny

1

Baik,

Bagi saya itu adalah dua langkah sederhana:

Pertama saya mengubah semua referensi ke System.Web.Mvc dari 4.0.0.0 ke 4.0.0.1,

Kemudian saya harus pergi ke properti System.Web.Mvc (mungkin karena saya telah menghapus dan menambahkannya kembali) dan mengubah salinan lokal menjadi true.

Semoga ini bermanfaat bagi seseorang.


0

Jika Anda masih mendapatkan kesalahan yang sama setelah mencoba solusi @Krzysztof atau salah satu jawaban lain di atas, satu solusi yang mungkin berhasil bagi Anda adalah menghapus instalasi MVC Runtime 4.0

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.