Windows güncellemesi MVC3 ve MVC4'ün çalışmamasına neden oldu


126

15 Ekim'de bir Windows Update (8.1) yükleyen tek kişi ben miyim ve MVC bu uyarı yüzünden aniden çalışmayı bıraktı?

Uyarı 1 Bu referans çözülemedi. "System.Web.Mvc, Sürüm = 4.0.0.0, Culture = nötr, PublicKeyToken = 31bf3856ad364e35, processorArchitecture = MSIL" derlemesi bulunamadı. Derlemenin diskte mevcut olduğundan emin olun. Kodunuz bu referansı gerektiriyorsa, derleme hataları alabilirsiniz.

Bu Windows güncellemesinin, 4.0.0.1 sürüm numaralı MVC'nin daha yeni bir sürümünü yüklediği ve eski sürümü program dosyaları klasöründen kaldırdığı görülüyor.

Biri her proje için taramadan bunu nasıl düzelteceğini biliyor mu?


Referans nereden geliyor? GAC? Referans derlemeleri mi yoksa nuget mi?
blowdart

1
Microsoft'un konuyla ilgili blogunu okuyun . ( Buna bağlantı verdiği için e4rthdog'a teşekkürler , daha fazla görünürlük elde etmek için yorum yapıyorum )
Hanna



1
Üretim ortamlarınızda da web.config'i düzenlemeniz gerekeceğini unutmayın.
Kaptan Kenpachi

Yanıtlar:


107

En iyi çözüm, DLL'yi 4.0.0.1 sürümüne güncellemektir. Nuget kullanmayı deneyin:

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

Bu otomatik olarak güncellenecek

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

System.Web.Mvc sürümünü manuel olarak şu konumda düzenlemeniz yeterlidir:

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


1
Yeap, GAC referansını NuGet referansı ile değiştirin. Bizim için çalıştı.
abatishchev

7
Microsoft'un konuyla ilgili blogunu okuyun . ( Buna bağlantı verdiği için e4rthdog'a teşekkürler , daha fazla görünürlük elde etmek için yorum yapıyorum )
Hanna

10
Yukarıdakileri yaptıktan sonra neden bu uyarılardan bir sürü alıyorum: "ASPNETCOMPILER: Warning CS1702: Assuming assembly reference 'System.Web.Mvc, Version = 4.0.0.0, Culture = nötr, PublicKeyToken = 31bf3856ad364e35' eşleşiyor ' System.Web.Mvc, Version = 4.0.0.1, Culture = nötr, PublicKeyToken = 31bf3856ad364e35 ', çalışma zamanı politikası sağlamanız gerekebilir "?
Farinha

1
@Farinha, aynı uyarılarım var. Onları uzak tutamıyorum. Bu uyarılar yapı performansını düşürür. Bunu düzeltmenin bir yolunu buldunuz mu?
StefanHa

3
Hayır @StefanHa, henüz bir düzeltme bulamadı. Görünümler klasörlerindeki Web.config dosyalarında uygulama genelinde 4.0.0.0'a bir dizi referans olduğunu fark ettim, ancak bunların hepsini manuel olarak değiştirdikten sonra bile uyarı hala devam ediyor.
Farinha

26

Biz elle her dokunmak zorunda .Csproj gelen sürümünü güncellemek için 4.0.0.0 ile 4.0.0.1 bizim gidiş yapýlar olsun. Oldukça acı.

Yeni referanslar şöyle görünmelidir:

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

3
MVC 3.0 için de aynı değişikliğin gerekli olduğuna dikkat edin, bunun tekrar çalışmasını sağlamak için referans "3.0.0.1" olmalıdır.
Andy

Benim durumumda bu gerekliydi ve ayrıca "Belirli Sürüm"
ün

24

Güncellemeden sonra aynı sorunu yaşadım:

Microsoft ASP.NET MVC 4.0 için Güvenlik Güncelleştirmesi (KB2993928)
http://support.microsoft.com/kb/2993928

Ancak yalnızca System.Web.Mvc'ye başvuran proje için, paket tarafından yüklenmemiş.

Microsoft ASP.NET MVC 4.0 Runtime'ı yüklememiş ve güncellemeyi almamış olan meslektaşımın herhangi bir sorunu yoktu ve 4.0.0.1'e değil, 4.0.0.0'a referansta bulunmaya devam ediyordu. Referansı

manuel olarak 4.0.0 olarak değiştirdim . 1 , check-in işleminden sonra meslektaşım hala 4.0.0 referans alınarak inşa edebilir. 0 .
(Her ikisi de Win7 Pro SP1, VS2013 Pro Güncelleme 3'te çalışıyor)


22

Lütfen bu bloga bakın, önerilen yol ilgili NuGet paketini güncellemektir:

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

Alıntılamak:

Sorun, aşağıdaki çözümlerden biri uygulanarak çözülebilir:

  1. (Tercihli) NuGet galerisinden Microsoft.AspNet.Mvc'yi yükleyin (bu, web.config dosyanıza bir bağlama yeniden yönlendirmesi yükleyecektir). Bunu, Visual Studio içindeki NuGet paket yöneticisinden veya NuGet konsolundan yapabilirsiniz:

    Yükleme Paketi Microsoft.AspNet.Mvc -Version -Project PROJECTNAME

    MVC 4 sürümü: 4.0.40804.0

    MVC 3 sürümü: 3.0.50813.1

  2. System.Web.MVC.dll başvurusunu el ile güncelleyin (GAC'deki başvuruyu kullanmayın).

    Referans Ekle -> Montajlar -> Uzantılar iletişim kutusunu deneyin.



4

Web projesi için, yapılandırmayı web.config dosyasında da güncellemeniz gerekebilir:

  <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

Çözümünüzde System.Web.Mvc'ye yönelik tüm başvuruları değiştirmeniz gerekir. Bunları silin ve yeni 4.0.0.1 sürümünü ekleyin.

Ayrıca özelliklerde copy localtrue olarak değişir .

Ve web.config dosyasında assambly bağlamayı mvc'nin yeni sürümüne işaret edecek şekilde ekleyin:

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

Ayar CopyLocal=truebize yardımcı olmadı; bkz: MS14-059'dan beri klasöre System.Web.MVCkopyalanmadıbin
Danny Tuppeny

1

Tamam,

Benim için iki basit adımdı:

Öncelikle System.Web.Mvc'ye yapılan tüm başvuruları 4.0.0.0'dan 4.0.0.1'e değiştirdim,

Sonra System.Web.Mvc'nin özelliklerine gitmem (muhtemelen onu kaldırıp yeniden eklediğim için) ve yerel kopyayı true olarak değiştirmem gerekti.

Umarım bu birisi için yararlıdır.


0

@Krzysztof çözümünü veya yukarıdaki diğer yanıtlardan herhangi birini denedikten sonra hala aynı hatayı alıyorsanız, sizin için işe yarayabilecek bir çözüm MVC Runtime 4.0'ı kaldırmaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.