การอัปเดต Windows ทำให้ MVC3 และ MVC4 หยุดทำงาน


126

ฉันเป็นคนเดียวที่ติดตั้ง Windows Update (8.1) ในวันที่ 15 ตุลาคมและ MVC หยุดทำงานเพราะคำเตือนนี้หรือไม่?

คำเตือน 1 ไม่สามารถแก้ไขข้อมูลอ้างอิงนี้ ไม่พบแอสเซมบลี "System.Web.Mvc, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35, processorArchitecture = MSIL" ตรวจสอบให้แน่ใจว่ามีชุดประกอบอยู่บนดิสก์ หากรหัสของคุณต้องการการอ้างอิงนี้คุณอาจได้รับข้อผิดพลาดในการคอมไพล์

ดูเหมือนว่าการอัปเดต windows นี้จะติดตั้ง MVC เวอร์ชันใหม่ที่มีหมายเลขเวอร์ชัน 4.0.0.1 และลบเวอร์ชันเก่าออกจากโฟลเดอร์ไฟล์โปรแกรม

มีใครทราบวิธีแก้ไขโดยไม่ต้องรวบรวมข้อมูลสำหรับแต่ละโครงการบ้าง


อ้างอิงมาจากไหน? GAC? อ้างอิงประกอบหรือ nuget?
blowdart

1
อ่านบล็อกของ Microsoftเกี่ยวกับเรื่องนี้ (ขอบคุณe4rthdogสำหรับการเชื่อมโยงไปยังสิ่งนี้เพียงแสดงความคิดเห็นเพื่อให้มองเห็นได้มากขึ้น)
Hanna



1
โปรดทราบว่าคุณจะต้องแก้ไข web.config ในสภาพแวดล้อมการผลิตของคุณด้วย
กัปตันเคนปาจิ

คำตอบ:


107

ทางออกที่ดีที่สุดคืออัปเดต DLL เป็นเวอร์ชัน 4.0.0.1 ลองใช้ nuget:

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

การดำเนินการนี้จะอัปเดตโดยอัตโนมัติ

  <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 ด้วยตนเองใน:

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


1
ใช่เพียงแทนที่การอ้างอิง GAC ด้วยการอ้างอิงของ NuGet ทำงานให้เรา
abatishchev

7
อ่านบล็อกของ Microsoftเกี่ยวกับเรื่องนี้ (ขอบคุณe4rthdogสำหรับการเชื่อมโยงไปยังสิ่งนี้เพียงแค่แสดงความคิดเห็นเพื่อให้มองเห็นได้มากขึ้น)
Hanna

10
มีความคิดว่าทำไมหลังจากทำข้างต้นฉันได้รับคำเตือนเหล่านี้ทั้งหมด: "ASPNETCOMPILER: คำเตือน CS1702: การอ้างอิงแอสเซมบลีที่สมมติว่า 'System.Web.Mvc, เวอร์ชัน = 4.0.0.0, Culture = เป็นกลาง, PublicKeyToken = 31bf3856ad364e35' ตรงกัน ' System.Web.Mvc เวอร์ชัน = 4.0.0.1 วัฒนธรรม = เป็นกลาง PublicKeyToken = 31bf3856ad364e35 'คุณอาจต้องจัดหานโยบายรันไทม์ "?
Farinha

1
@Farinha ฉันมีคำเตือนเหมือนกัน ฉันไม่สามารถเอามันไปได้ คำเตือนเหล่านี้ทำลายประสิทธิภาพการสร้าง คุณพบวิธีแก้ไขปัญหานี้หรือไม่?
StefanHa

3
ไม่มี @StefanHa ยังไม่พบวิธีแก้ไข ฉันสังเกตเห็นว่ามีการอ้างอิงถึง 4.0.0.0 มากมายตลอดทั้งแอปพลิเคชันในไฟล์ Web.config ภายในโฟลเดอร์ Views แต่ถึงแม้จะเปลี่ยนคำเตือนทั้งหมดด้วยตนเองแล้วก็ตาม
Farinha

26

เราต้องแตะ. csprojแต่ละอันด้วยตนเองเพื่ออัปเดตเวอร์ชันจาก4.0.0.0เป็น4.0.0.1เพื่อให้งานสร้างของเราดำเนินต่อไป ค่อนข้างเจ็บ.

ข้อมูลอ้างอิงใหม่ควรมีลักษณะดังนี้:

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

3
โปรดทราบว่าการเปลี่ยนแปลงเดียวกันนี้จำเป็นสำหรับ MVC 3.0 การอ้างอิงควรเป็น "3.0.0.1" เพื่อให้ทำงานได้อีกครั้ง
Andy

ในกรณีของฉันจำเป็นต้องมีสิ่งนี้และจำเป็นต้องระบุด้วยว่า "เวอร์ชันเฉพาะ" เป็น "จริง"
pimbrouwers

24

มีปัญหาเดียวกันหลังการอัปเดต:

ปรับปรุงความปลอดภัยสำหรับ Microsoft ASP.NET MVC 4.0 (KB2993928)
http://support.microsoft.com/kb/2993928

แต่สำหรับโครงการที่อ้างอิงถึง System.Web.Mvc เท่านั้นไม่ได้ติดตั้งโดยแพ็คเกจ

เพื่อนร่วมงานของฉันที่ไม่ได้ติดตั้ง Microsoft ASP.NET MVC 4.0 Runtime และไม่ได้รับการอัปเดตก็ไม่มีปัญหาและยังคงอ้างอิงถึง 4.0.0.0 ไม่ใช่ 4.0.0.1

ฉันเปลี่ยนการอ้างอิงเป็น 4.0.0 ด้วยตนเอง . 1หลังจากเช็คอินเพื่อนร่วมงานของฉันยังสามารถสร้างโดยอ้างอิงถึง 4.0.0 0 .
(ทำงานทั้งบน Win7 Pro SP1, VS2013 Pro Update 3)


22

โปรดดูบล็อกนี้วิธีที่แนะนำคืออัปเดตแพ็คเกจ NuGet ที่เกี่ยวข้อง:

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

อ้างถึง:

ปัญหาสามารถแก้ไขได้โดยใช้หนึ่งในแนวทางแก้ไขต่อไปนี้:

  1. (ต้องการ) ติดตั้ง Microsoft.AspNet.Mvc จากแกลเลอรี NuGet (สิ่งนี้จะติดตั้งการเปลี่ยนเส้นทางการผูกใน web.config ของคุณ) คุณสามารถทำได้จากตัวจัดการแพ็คเกจ NuGet หรือคอนโซล NuGet ภายใน Visual Studio:

    ติดตั้งแพคเกจ Microsoft.AspNet.Mvc -Version -Project PROJECTNAME

    เวอร์ชัน MVC 4: 4.0.40804.0

    เวอร์ชัน MVC 3: 3.0.50813.1

  2. อัปเดตข้อมูลอ้างอิงไปยัง System.Web.MVC.dll ด้วยตนเอง (อย่าใช้ข้อมูลใน GAC)

    ลองใช้กล่องโต้ตอบ Add Reference -> Assemblies -> Extensions



4

สำหรับโครงการเว็บคุณอาจต้องอัปเดตการกำหนดค่าใน web.config ด้วย:

  <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

คุณต้องเปลี่ยนการอ้างอิงทั้งหมดเป็น System.Web.Mvc ภายในโซลูชันของคุณ เพียงลบออกและเพิ่มเวอร์ชัน 4.0.0.1 ใหม่

นอกจากนี้ในคุณสมบัติเปลี่ยนcopy localเป็นจริง

และใน web.config เพิ่มการผูกแบบ assambly เพื่อชี้ไปที่ 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>

การตั้งค่าCopyLocal=trueไม่ได้ช่วยเรา ดู: System.Web.MVCไม่ได้คัดลอกไปยังbinโฟลเดอร์ตั้งแต่ MS14-059
Danny Tuppeny

1

ตกลง,

สำหรับฉันมันเป็นสองขั้นตอนง่ายๆ:

ก่อนอื่นฉันเปลี่ยนการอ้างอิงทั้งหมดเป็น System.Web.Mvc จาก 4.0.0.0 เป็น 4.0.0.1

จากนั้นฉันต้องไปที่คุณสมบัติของ System.Web.Mvc (อาจเป็นเพราะฉันได้ลบและเพิ่มเข้าไปใหม่) และเปลี่ยน copy local เป็น true

หวังว่านี่จะเป็นประโยชน์สำหรับใครบางคน


0

หากคุณยังคงได้รับข้อผิดพลาดเดิมหลังจากลองใช้โซลูชัน @Krzysztof หรือคำตอบอื่น ๆ ข้างต้นวิธีแก้ปัญหาที่อาจใช้ได้ผลสำหรับคุณคือการถอนการติดตั้ง MVC Runtime 4.0

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.