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?

Yogurtu
sumber
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" />

Krzysztof Kalinowski
sumber
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" />
Zach La Lond
sumber
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)

Mulut
sumber
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.

Miguel Lacouture
sumber
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>
THN
sumber
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>
Robert Benyi
sumber
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.

edencorbin
sumber
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

Ricardo Sanchez
sumber