System.web.mvc หายไป


90

เรามีแอปพลิเคชันเว็บ ASP.NET MVC 3 รุ่นเก่าซึ่งสร้างใน VS2010 ซึ่งไม่สามารถรวบรวมได้ตั้งแต่การอัปเดตความปลอดภัยเมื่อสัปดาห์ที่แล้ว

ปัญหาคือการอ้างอิงไปยัง System.Web.Mvc.dll ใช้งานไม่ได้

เมื่อฉันเปิดไฟล์โซลูชันบนเครื่องบิลด์ของเราโดยที่การอัปเดตความปลอดภัยยังไม่ทำงานและเปิดกล่องโต้ตอบคุณสมบัติสำหรับการอ้างอิง -> System.Web.MVC ก็ดูดี

เส้นทางคือ C: \ Program Files \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll เวอร์ชัน 3.0.0.0

แต่เมื่อฉันเปิดไฟล์โซลูชันบนเครื่อง dev ที่รันการอัปเดตความปลอดภัยการอ้างอิง -> System.Web.MVC ถูกตั้งค่าสถานะว่าหายไป หากฉันลบออกและพยายามเพิ่มกลับโดยใช้กล่องโต้ตอบเพิ่มการอ้างอิงของ VS2010 มันจะไม่ปรากฏขึ้น

การเดินท่องเว็บทำให้ฉันได้รับคำแนะนำเกี่ยวกับการอัปเดต MVC โดยใช้ NuGet เราไม่ได้ใช้ NuGet ในโครงการ VS2010 ของเราดังนั้นมันจึงดูไม่ถูกต้องนักสำหรับสถานการณ์นี้ ฉันลองแล้วและจบลงด้วยการอ้างอิงที่ขาดหายไปครึ่งโหล

เมื่อฉันดูคุณสมบัติของ "C: \ Program Files \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll" ใน Windows Explorer บนเครื่องสร้างฉันเห็นเวอร์ชัน 3.0.0.0

เมื่อฉันดูคุณสมบัติบนเครื่อง dev ฉันเห็นเวอร์ชัน 3.0.50813.1

สิ่งที่ฉันต้องการคือวิธีเปลี่ยนวิธีสร้างและเรียกใช้เพื่อให้ฉันสามารถสร้างและเรียกใช้ไม่ว่าจะติดตั้ง DLL สองตัวนี้ในกรอบ.

ไอเดีย?

สิ่งที่ฉันพยายามแล้วไม่ได้ผล

ความพยายามครั้งแรก - หากชุดประกอบขาดหายไปให้เพิ่ม ฉันลบข้อมูลอ้างอิงเก่าที่หายไป จากนั้นฉันคัดลอก DLL จากโฟลเดอร์ "ASP.NET MVC3 \ Assemblies" ลงในโฟลเดอร์ในโครงการของฉัน ตั้งเป็น "คัดลอกเสมอ" และเพิ่มเป็นข้อมูลอ้างอิง

ด้วยเหตุนี้โครงการจะคอมไพล์ใน VS2010 แต่เมื่อฉันพยายามคอมไพล์หน้าเว็บด้วย aspnet_compiler ฉันได้รับคำเตือน:

(0): warning CS1702: Assuming assembly reference 'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' matches 'System.Web.Mvc, Version=3.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35', you may need to supply runtime policy

จนถึงตอนนี้ฉันสามารถจัดการเพื่อหลีกเลี่ยงการทำความเข้าใจนโยบายรันไทม์ได้ แต่ฉันพยายามเพิ่มสิ่งนี้ใน web.config:

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

ลองอีกครั้งและได้รับคำเตือนเหมือนกัน

คำถามของฉันคือ - ฉันยังคงมีปัญหาอยู่หรือไม่? หรือฉันจะแก้ไขได้แม้จะมีคำเตือน?


คุณได้ลองอัปเดตแพ็คเกจ nuget ทั้งหมดเป็นเวอร์ชันล่าสุดแล้วหรือยัง (แน่นอนว่าเป็นไปได้) หรือไม่?
Silvermind

1
ฉันสงสัยว่าคุณกำลังพบข้อผิดพลาดในการอัปเดต MS14-059 ...
Steven V

1
เว็บแอปไม่มีแพ็คเกจ nuget และใช่มันเป็นข้อผิดพลาด MS14-059
Jeff Dege

ฉันมีสิ่งที่ดูเหมือนปัญหาเดียวกันแม้ว่าฉันจะใช้แพ็คเกจ nuget และเวอร์ชัน 4 แทน มันรวบรวมได้ดีและทุกอย่างใช้งานได้ แต่มีคำเตือนการคอมไพล์มากกว่า 20 รายการที่ฉันต้องการกำจัด
Farinha

คำตอบ:


143

รับ MVC3 เวอร์ชันล่าสุดผ่าน NuGet เปิดโปรเจ็กต์ของคุณใน Dev Studio เปิดแท็บ Package Manager Console ที่ด้านล่างของ Dev Studio จากนั้นใช้คำสั่งนี้:

PM> Install-Package Microsoft.AspNet.Mvc -Version 3.0.50813.1

หากคุณคลิกแป้นแท็บหลัง "-Version" คุณจะได้รับรายชื่อเวอร์ชันทั้งหมดที่มี

หากคุณมี NuGet เวอร์ชันเก่าคุณอาจได้รับข้อผิดพลาดที่ระบุว่าคุณต้องอัปเกรด ในกรณีนี้ให้เปิด Tools-> Extension Manager เพื่อติดตั้ง NuGet เวอร์ชันล่าสุด หมายเหตุคุณจะต้องเรียกใช้ Dev Studio ในฐานะผู้ดูแลระบบก่อนจึงจะสามารถติดตั้ง NuGet ได้

การติดตั้ง MVC3 ควรอัปเดต Web.config ในโปรเจ็กต์ของคุณ

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

1
บาดาบิง !!!! ใช้เวลาหลายชั่วโมงกับสิ่งนี้ ... ง่ายพอที่จะติดตั้งเวอร์ชันใน Nuget pm .... ขอบคุณมาก !!!
Squ1rr3lz

ใช่ Nuget ทำงานร่วมกับ Visual Studio 2010 ได้เพียงแค่ติดตั้งผ่าน Extension Manager ภายใต้เมนูเครื่องมือ
3spot

2
ติดตั้งแพ็คเกจ Microsoft.AspNet.Mvc จะแก้ไขปัญหานี้ เราไม่จำเป็นต้องพูดถึงหมายเลขเวอร์ชัน
จริงๆ

2
@sujaykodamala การตั้งค่าหมายเลขเวอร์ชันมีความสำคัญหากคุณต้องการติดตั้ง MVC3 ล่าสุดไม่ใช่ MVC5 (แพ็กเกจเวอร์ชันล่าสุด)
3spot

Install-Package Microsoft.AspNet.Mvc -Project ProjectName -Reinstallมีความชัดเจนมากขึ้นติดตั้งเวอร์ชันที่คุณมีสำหรับโปรเจ็กต์นั้นและป้องกันไม่ให้แตะโปรเจ็กต์อื่น ๆ (หากต้องการ)
Mike E

30

MVC 5

C: \ Program Files (x86) \ Microsoft ASP.NET \ ASP.NET เว็บสแต็ค 5 \ Packages \ Microsoft.AspNet.Mvc.5.0.0 \ lib \ net45 \ System.Web.Mvc.dll

MVC 4

C: \ Program Files (x86) \ Microsoft ASP.NET \ ASP.NET MVC 4 \ Assemblies \ System.Web.Mvc.dll

MVC 3

C: \ Program Files (x86) \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll

MVC 2

C: \ Program Files (x86) \ Microsoft ASP.NET \ ASP.NET MVC 2 \ Assemblies \ System.Web.Mvc.dll

ฉันจะหา System.Web.MVC dll ในระบบที่ติดตั้ง MVC 3 ได้ที่ไหน


ขอบคุณสิ่งนี้ช่วยให้ฉันเปิดโครงการที่กำหนดเป้าหมายสำหรับ VS2010 ในปี 2018 :)
Aamol

23

วิธีที่ง่ายที่สุดในการแก้ปัญหานี้คือติดตั้ง ASP.NET MVC 3 จากโปรแกรมติดตั้ง Web Platforms

ป้อนคำอธิบายภาพที่นี่

http://www.microsoft.com/web/downloads/

หรือโดยใช้คำสั่ง Nuget

Install-Package Microsoft.AspNet.Mvc -Version 3.0.50813.1

1
สิ่งนี้แก้ไขปัญหาของฉันที่เกิดขึ้นหลังจากที่ฉันเปลี่ยนไปใช้พีซีเครื่องใหม่และมีโครงการที่มีการอ้างอิงถึง ASP.NET MVC 4 dll ซึ่งฉันยังไม่ได้ติดตั้งในเครื่องใหม่
clovola


2

ฉันมีสถานการณ์เดียวกัน: Visual Studio 2010 ไม่มีการติดตั้ง NuGet และแอปพลิเคชัน ASP.NET ที่ใช้ System.Web.Mvc เวอร์ชัน 3

สิ่งที่ได้ผลสำหรับฉันคือการตั้งค่าโครงการ C # แต่ละโครงการที่ใช้ System.Web.Mvc เพื่อไปที่การอ้างอิงในโซลูชัน Explorer และตั้งค่าคุณสมบัติบน System.Web.Mvc ด้วยการคัดลอก Local เป็นจริงและเวอร์ชันเฉพาะเป็นเท็จ - อันสุดท้ายทำให้ฟิลด์เวอร์ชันแสดงเวอร์ชันปัจจุบันบนเครื่องนั้น


1

หากมีปัญหานี้ใน vs2017 ฉันได้รับ MVC ผ่านทาง nuget แล้ว แต่ System.Web.Mvc ไม่ปรากฏในรายการ "แอสเซมบลี" ภายใต้ "เพิ่มการอ้างอิง"

วิธีแก้ปัญหาคือเลือก "ส่วนขยาย" ภายใต้ "แอสเซมบลี" ในกล่องโต้ตอบ "เพิ่มการอ้างอิง"


1

ในกรณีที่มีคนอยู่ในตำแหน่งที่เขาได้รับข้อผิดพลาดเดียวกัน ในกรณีของฉันการดาวน์เกรด Microsoft.AspNet.Mvc แล้วอัปเกรดอีกครั้งช่วยได้ ฉันมีปัญหานี้หลังจากติดตั้งและลบออก System.Web.Mvc อ้างอิงผิดอย่างใดการทำความสะอาดโซลูชันหรือการสร้างใหม่ไม่ได้ผลในกรณีของฉัน ลองใช้ดูหากคำตอบข้างต้นไม่เหมาะกับคุณ


0

ในกรณีของฉันฉันมีข้อมูลอ้างอิงที่เหมาะสมทั้งหมดในโครงการของฉัน ฉันพบว่าด้วยการสร้างโซลูชันแพ็กเกจนักเก็ตจะถูกกู้คืนโดยอัตโนมัติ


0

mvcmusicstore.codeplex.com ตัวอย่างที่เปิดใน vs2015 พลาดการอ้างอิงบางส่วนหนึ่งในนั้น System.web.mvc

การแก้ไขนี้คือการลบออกจากการอ้างอิงและเพิ่มข้อมูลอ้างอิง: เลือกExtentionsภายใต้ Assemblies คุณสามารถค้นหาและเพิ่ม System.Web.Mvc ได้

(แอสเซมบลีอื่น ๆ ที่ฉันเพิ่มพร้อมแพ็คเกจนักเก็ต)


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