เหตุใด System.Web.Mvc จึงไม่อยู่ในรายการเพิ่มการอ้างอิง


134

ใช้ C #, Visual Studio 2010

มีเนมสเปซที่เรียกว่าSystem.Web.Mvc ที่บันทึกไว้ใน MSDN เอกสารทุกประเภทใน namespace System.Web.Mvc.dllที่กล่าวว่าพวกเขาอยู่ใน

อย่างไรก็ตามเมื่อฉันไปที่เพิ่มการอ้างอิงแท็บ“ .NET” แอสเซมบลีนี้หายไปจากรายการ ทำไม?


1
คุณสามารถชี้แจง: โครงการของคุณทำงานโดยไม่มีข้อมูลอ้างอิงหรือไม่? อยู่ใน web.config ของคุณหรือไม่ (ดูคำตอบของฉัน)
พื้นฐาน

4
ฉันไม่ได้ทำงานในโครงการใด ๆ ฉันแค่อยากช่วยใครสักคนที่นี่ใน StackOverflow ฉันมักจะเพิ่มข้อมูลอ้างอิงเพื่อดู IntelliSense และ / หรือ F12 สำหรับประเภทใด ๆ ในกรณีนี้ชุดประกอบที่ต้องการหายไปจากรายการฉันจึงถามว่าทำไม
Timwi

1
หมายเหตุสำหรับผู้อ่านหน้านี้ - ณ วันนี้ (2015-02-09) วิธีการแก้ไขปัญหานี้มีการเปลี่ยนแปลงตลอดเวลา - อ่านคำตอบทั้งหมด - VS.NET และ. NET เวอร์ชันต่างๆย้ายโค้ดที่อ้างอิงสำหรับ MVC ไปยัง ไปยังสถานที่ต่างๆ
qxotk

คำตอบ:


106

ใน VS Express 2012 ฉันไม่พบ System.Web.Mvc ในแท็บ "แอสเซมบลี" แต่หลังจากค้นหาสักครู่ฉันพบว่าฉันต้องดูในแท็บ" แอสเซมบลี \ ส่วนขยาย " แทนที่จะเป็น "แอสเซมบลี \ เฟรมเวิร์ก" เริ่มต้น "แท็บ


1
+1 สำหรับคุณเพราะคุณพบสาเหตุของปัญหาที่ฉันมี ฉันเลือกใช้วิธีการติดตั้ง NuGet ที่กำหนดไว้ด้านล่างและฉันจะแสดงความคิดเห็นว่าฉันทำอะไร
qxotk

ฉันลองใช้วิธีนี้ใน Visual Studio Community 2015 แต่ฉันพบข้อผิดพลาดรันไทม์ที่เกี่ยวข้องกับเวอร์ชันที่เข้ากันไม่ได้ ( Could not load file or assembly...The located assembly's manifest definition does not match the assembly reference) ฉันมีโครงการอื่นในโซลูชันของฉันที่อ้างถึงเวอร์ชันอื่นและวิธีนี้อนุญาตให้ฉันเพิ่มการอ้างอิงไปยัง System.Web.Mvc เวอร์ชัน = 4.0.0.0 เท่านั้น วิธีการติดตั้ง NuGet ได้เพิ่มเวอร์ชันที่ถูกต้อง
NJS

104

วิธีที่ดีที่สุดคือใช้ NuGet package manager

เพียงอัปเดตแพ็คเกจ MVC ด้านล่างและควรใช้งานได้

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


4
ฉันต้องยอมรับว่านี่เป็นวิธีที่ถูกต้องในการเพิ่มการอ้างอิงถึง MVC ในกรณีส่วนใหญ่ (ควรช่วยให้คุณมีปัญหาในการเรียกใช้แอปนอก Visual Studio ซึ่งอาจทำให้การอ้างอิงไม่ถูกต้อง) อย่างไรก็ตามในโซลูชันขนาดใหญ่ที่มี MVC อยู่แล้วบางโครงการการใช้ "จัดการแพ็คเกจ NuGet สำหรับโซลูชัน" เพื่อติดตั้งไลบรารีเวอร์ชันเดียวกันจะดีกว่า เหตุผลก็คือถ้าคุณเพิ่งติดตั้งจาก NuGet package manager คุณอาจพบกับเวอร์ชันที่เข้ากันไม่ได้ (โดยปกติแล้วผู้จัดการจะเสนอเวอร์ชันใหม่ล่าสุดให้คุณ)
jahu

2
ฉันใช้โซลูชันนั้นสำหรับโปรเจ็กต์โดยใช้ MVC 4 ที่ไม่สามารถคอมไพล์กับ Visual Studio 2015 ได้นอกจากนี้ยังทำให้แน่ใจว่าไลบรารีของโปรเจ็กต์มีความเหมือนกันในทุกนักพัฒนา
ceetheman

1
ฉันมีปัญหากับกล่องที่มี VS2015 เท่านั้นในขณะที่สมาชิกในทีมคนอื่นมี VS2013 ซึ่งอาจทำให้พวกเขาอ้างถึงตำแหน่งเก่า (ไม่มีข้อผิดพลาดในการสร้าง) ในขณะที่ฉันไม่มีรหัสและข้อผิดพลาดในการสร้าง ของ Note ณ วันนี้ฉันไม่พบ Microsoft.Web.Mvc ซึ่งเป็นข้อมูลอ้างอิงที่ทำให้เกิดปัญหา ในคำตอบจาก @forderah ทำให้เห็นความจริงที่ว่าชื่อแตกต่างกันใน NuGet Microsoft.Web.Mvc ตอนนี้เป็น Microsoft.AspNet.Mvc ซึ่งดึงการอ้างอิงที่ระบุไว้ในคำตอบของเขา / เธอด้วย
qxotk

1
ฉันยังมีปัญหานี้ใน VS2017 และสิ่งนี้ได้รับการแก้ไขแล้ว ไม่แน่ใจว่าทำไม VS2017 ถึงบอกฉันว่ามันคิดว่าแอสเซมบลีที่ต้องอ้างอิงคือ System.Web.Mvc ในขณะที่มันกำลังมองหา Microsoft.AspNet.Mvc
Michael Davidson

60

ฉันมีปัญหาเดียวกันและไม่สามารถค้นหาแอสเซมบลีอ้างอิง System.Web.MVC ได้

ในที่สุดก็พบและตั้งอยู่ในสถานที่ต่อไปนี้

สังเกตว่า VS ของคุณติดตั้งไว้ใน C: (บางครั้ง MVC.dll ไม่ได้อยู่ในตำแหน่งเริ่มต้นที่ทุกคนพูดถึงฉันหมายถึงโฟลเดอร์ " Reference Assemblies " ที่อยู่ในไดรฟ์ C :)

ถ้าไม่มีก็ควรอยู่ที่นี่:

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

ดังนั้นเพิ่ม dll ผ่านการนำทางหรือแท็บเรียกดูในเมนูเพิ่มการอ้างอิง


1
สิ่งนี้ได้รับการอ้างอิงสำหรับฉันแม้ว่าฉันแน่ใจว่าได้เพิ่มการอ้างอิงนี้ก่อนหน้านี้ผ่านรายการ Framework Assemblies
Zarepheth

9
ไม่ใช่ทางออกที่ดีจริงๆหากคุณทำงานเป็นทีมกับ VCS เส้นทางสัมบูรณ์เป็นสิ่งชั่วร้ายในกรณีนี้
Denis The Menace

ยอมรับอย่างแน่นอนว่านี่เป็นวิธีแก้ปัญหาที่ไม่ดีในสภาพแวดล้อมการพัฒนาทีมทุกประเภทเนื่องจากการพึ่งพาพา ธ สัมบูรณ์แบบฮาร์ดโค้ด
Craig

วิธีที่คุณจะได้รับคือเพื่อให้แน่ใจว่าทุกคนใช้เส้นทางเดียวกันสำหรับ DLL ไม่น่าจะเป็นปัญหาหากสมาชิกในทีมทุกคนมีการติดตั้งแอสเซมบลีที่ตำแหน่งนั้นตามที่ควร หรืออีกวิธีหนึ่งคือสามารถคัดลอก DLL จากพา ธ นั้นและวางลงในโปรเจ็กต์ได้โดยตรงดังนั้นจึงมีพา ธ สัมพัทธ์ แต่อย่างใดเพียงแค่มีตำแหน่งที่ตั้งของ DLL นั้นก็เป็นจุดเริ่มต้นที่ดี
vapcguy

สิ่งนี้ช่วยได้มาก แต่ Microsoft ควรทำให้สิ่งนี้สะอาดและง่ายขึ้นกว่านี้ ....
JosephDoggie

28

คุณยังสามารถเพิ่มสิ่งนี้ได้จาก Nuget Package Manager Console เช่น:

Install-Package Microsoft.AspNet.Mvc -Version 4.0.20710.0 -ProjectName XXXXX

Microsoft.AspNet.Mvc มีการอ้างอิงบน:

  • 'Microsoft.AspNet.WebPages (≥ 2.0.20710.0 && <2.1)'
  • 'Microsoft.Web. โครงสร้างพื้นฐาน (≥ 1.0.0.0)'
  • 'Microsoft.AspNet.Razor (≥ 2.0.20710.0 && <2.1)'

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

ฉันชอบสิ่งนี้เพื่อชี้ไปที่แอสเซมบลีในระบบไฟล์หรือใน GAC เนื่องจากการอัปเดตแพ็คเกจในอนาคตน่าจะเจ็บปวดน้อยกว่าประสบการณ์ที่ฉันเคยพบกับ GAC และการอ้างอิงแอสเซมบลีระบบไฟล์ในอดีต


1
ฉันใช้วิธีนี้และฉันเห็นด้วยกับการไม่ใช้เส้นทางสัมบูรณ์ในพื้นที่ในการอ้างอิง ฉันใช้ตัวจัดการแพ็คเกจ NuGet การเพิ่มแพ็คเกจและการอ้างอิงได้แก้ไขปัญหาในกล่อง VS2015 เท่านั้น
qxotk

11

ฉันมีปัญหาเดียวกันและนี่คือเหตุผลที่ตลก: ฉันเดาว่าคุณคาดว่าSystem.Web.Mvcจะอยู่ภายใต้System.Webรายชื่อ แต่รายการไม่เรียงตามตัวอักษร

อันดับแรกจัดเรียงรายการจากนั้นดูใกล้ ๆ ไฟล์System.Web.


1
ตรวจสอบให้แน่ใจว่าคุณได้รับเวอร์ชันที่ถูกต้อง ในกรณีของฉัน System.Web.Mvc v2 และ v4 อยู่ที่นั่นและพวกเขาก็ไม่ได้อยู่ติดกัน
ทท

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

5

"ตกลงการเพิ่ม XML นั้นลงใน Web.config ใช้งานได้ แต่ไม่ตอบคำถาม"

มันควรจะอยู่ที่นั่น ตามค่าเริ่มต้นรายการอ้างอิงเพิ่มดูเหมือนจะได้รับคำสั่ง แต่ไม่เป็นเช่นนั้น กดที่ส่วนหัวของชื่อแล้วดูอีกครั้ง


ฉันมักไม่พูดว่า“ ชุดประกอบนี้หายไปจากรายการ” เว้นแต่ฉันจะแน่ใจ
Timwi

@ Timwi ฉันคิด แต่ได้รับคำตอบอื่น ๆ ว่ามีโอกาสน้อยที่จะไม่มีการติดตั้งเทียบกับ 2010 และในกรณีของฉันฉันมักจะพบสิ่งที่ต้องการในรายการอ้างอิงโดยไม่ต้องกดปุ่มส่วนหัวของชื่อที่ฉันมี จะบอกว่า ... ที่จริงตอนนี้ฉันรู้แล้วว่าทำไมฉันไม่เคยทำมาก่อนและในปี 2010 ฉันทำ - ดูความคิดเห็นแรก: weblogs.asp.net/scottgu/archive/2009/10/29/…
eglasius

คุณกำลังบอกว่าการคลิกส่วนหัวของชื่อจะจัดเรียงสิ่งต่างๆให้คุณหรือไม่? ไม่มีอะไรที่นี่บนเครื่องของฉัน ...
Roman Starkov

1
@romkyns ใช้งานได้หลังจากโหลดแอสเซมบลีทั้งหมดในรายการแล้วเท่านั้น
eglasius

5

ตรวจสอบขั้นตอนเหล่านี้:

  1. ตรวจสอบว่า MVC ติดตั้งอย่างถูกต้อง
  2. ตรวจสอบคุณสมบัติของโครงการและดูว่ากรอบเป้าหมายของโครงการคืออะไร ถ้ากรอบเป้าหมายไม่ได้ตั้งค่าเป็น. Net Framework 4 ให้ตั้งค่า

หมายเหตุ : หากกรอบเป้าหมายถูกตั้งค่าเป็น. Net Framework 4 Client Profile จะไม่แสดงรายการอ้างอิง MVC ในรายการอ้างอิง คุณสามารถค้นหาที่แตกต่างกันระหว่าง 4 Framework .NET และ 4 Framework .NET โปรไฟล์ไคลเอนต์ที่นี่

โปรไฟล์ไคลเอ็นต์. NET Framework 4 เป็นชุดย่อยของ. NET Framework 4 ที่ปรับให้เหมาะสมสำหรับไคลเอ็นต์แอ็พพลิเคชัน มีฟังก์ชันการทำงานสำหรับแอปพลิเคชันไคลเอนต์ส่วนใหญ่รวมถึง Windows Presentation Foundation (WPF), Windows Forms, Windows Communication Foundation (WCF) และคุณลักษณะ ClickOnce ทำให้สามารถปรับใช้งานได้เร็วขึ้นและแพคเกจการติดตั้งที่เล็กลงสำหรับแอปพลิเคชันที่กำหนดเป้าหมายโปรไฟล์ไคลเอ็นต์. NET Framework 4


นี่เป็นเคล็ดลับที่ดี เมื่อฉันไปที่คุณสมบัติของโครงการของฉันมันจะแสดงรายการเฉพาะ. NET Core 1 และ 2 เท่านั้นไม่ใช่. NET Framework 4.x. ฉันไม่มีชุดประกอบในรายการของฉัน ปรากฎว่าเป็นวิธีที่ฉันสร้างโครงการ - ฉันเลือกตัวเลือกที่ไม่ถูกต้อง - เพื่อใช้. NET Core แทน. NET Framework ตอนนี้ฉันรู้ถึงความแตกต่างแล้ว :)
vapcguy

4

ฉันแก้ปัญหานี้โดยค้นหา "mvc" System.Web.Mvc ปรากฏในผลการค้นหาแม้ว่าจะไม่มีอยู่ในรายการก็ตาม


3

ตอนนี้แอสเซมบลีที่ต้องการปรากฏในรายการ

ฉันสามารถคาดเดาได้ว่าอะไรทำให้มันปรากฏขึ้น แต่ฉันสงสัยว่ามันเป็นความจริงที่ว่าฉันไปFileNewProjectASP.NET Web Applicationซึ่งฉันไม่เคยทำมาก่อน เป็นไปได้ว่าสิ่งนี้ทำให้การเริ่มต้นล่าช้าเกิดขึ้นและรายการจะถูกเติมด้วยแอสเซมบลีเพิ่มเติมสำหรับการพัฒนาเว็บ


มันมักจะอยู่ที่นั่นเสมอมันก็โอเค: P ... ดูความคิดเห็นที่ฉันเพิ่มในคำตอบของฉันในลิงค์ที่ระบุว่า: "ปัญหาเกี่ยวกับแท็บ. net คือในขณะที่ async กำลังเกิดขึ้นและกำลังรีเฟรชอยู่ ไม่ได้เรียงตามลำดับตัวอักษร ... "... ซึ่งเป็นพฤติกรรมใหม่กับปี 2010 ฉันไม่เคยตระหนักเลยจนกระทั่งฉันเห็นคำถามของคุณ
eglasius

@egl ฉันเพิ่งทดสอบบนเครื่องของฉันที่นี่ (VS2010) และมันไม่อยู่ในรายการเลย ฉันได้รับชุดประกอบที่แตกต่างกันขึ้นอยู่กับ Target Framework แต่อันนี้ไม่เคยมี
Roman Starkov

@romkyns ลองกำหนดเป้าหมาย. net 4 และทำตามที่ฉันกล่าวไว้ในคำตอบของฉัน ตรวจสอบให้แน่ใจว่าได้ให้เวลาเพียงพอในการโหลดเนื่องจากจะโหลดแบบ async
eglasius

2

สิ่งนี้มีการเปลี่ยนแปลงสำหรับ Visual Studio 2012 (ฉันรู้ว่าคำถามเดิมระบุว่า VS2010 แต่ชื่อจะยังคงถูกค้นหา)

เมื่อคุณสร้างโปรเจ็กต์ VS2012 MVC system.web.mvc จะอยู่ในโฟลเดอร์แพ็กเกจซึ่งเป็นเพียร์กับโซลูชัน สิ่งนี้จะถูกอ้างอิงในโครงการเว็บตามค่าเริ่มต้นและคุณสามารถค้นหาเส้นทางที่แน่นอนได้ที่นั่น)

หากคุณต้องการอ้างอิงสิ่งนี้ในโครงการรอง (เช่น. dll ที่รองรับพร้อมตัวกรองหรือแอตทริบิวต์อื่น ๆ ) คุณสามารถอ้างอิงได้จากที่นั่น


2

ฉันไม่ได้รับ System.Web.Mvc ใน VS 2012 แต่ฉันได้รับใน VS 2013 การใช้กล่องโต้ตอบ AddReference ป้อนคำอธิบายภาพที่นี่

หรือคุณจะพบสิ่งนี้ในเส้นทางโครงการของคุณ

YourProjectName \ package \ Microsoft.AspNet.Mvc.5.0.0 \ lib \ net45 \ System.Web.Mvc.dll


เคล็ดลับดีๆที่แสดงตำแหน่งที่จะพบในเส้นทางโครงการที่มีอยู่ ขอบคุณ!
Alan

0

ฉันเชื่อว่าคุณจะพบว่าแอสเซมบลี MVC ถูกอ้างอิงในไฟล์ web.config ไม่ใช่ในโปรเจ็กต์

สิ่งนี้:

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

เพื่อตอบกลับความคิดเห็นของคุณ

คำตอบที่ดีที่สุดที่ฉันสามารถให้ได้คือจากที่นี่ :

องค์ประกอบ add เพิ่มการอ้างอิงแอสเซมบลีเพื่อใช้ในระหว่างการรวบรวมทรัพยากรแบบไดนามิก ASP.NET จะเชื่อมโยงแอสเซมบลีนี้กับรีซอร์สโดยอัตโนมัติเมื่อคอมไพล์โมดูลโค้ดแต่ละโมดูล


ตกลงการเพิ่ม XML นั้นไปยัง Web.config ใช้งานได้ แต่ไม่ตอบคำถาม
Timwi

"ใช้งานได้" ในขณะที่ให้ Intellisense? ฉันแก้ไขคำตอบแล้ว
Basic

0

สามารถติดตั้งแยกออกจากกันและไม่รวมอยู่ใน framwork ให้เลือกรายการแท็บ "ส่วนขยาย" และมีอยู่มี libs อื่น ๆ อีกมากมายทั้งหมดไม่จำเป็นต้องใช้ libs เก่า ฯลฯ มีอยู่เก่า 20 30 และ 4001


0

ถ้าคุณมีปัญหานี้ใน Visual Studio 2017, โอกาสที่คุณทำงานอยู่กับโครงการ MVC 4 สร้างขึ้นในรุ่นก่อนหน้าของ VS C:\Program Files (x86)\Microsoft ASP.NETกับเส้นทางที่คำใบ้อ้างอิงชี้ไปที่ Visual Studio 2017 ไม่ได้ติดตั้งไดเร็กทอรีนี้อีกต่อไป

โดยปกติเราจะแก้ปัญหานี้โดยการติดตั้งสำเนาของ Visual Studio 2015 ควบคู่ไปกับอินสแตนซ์ 2017 ของเราและติดตั้งไลบรารีที่จำเป็นในเส้นทางด้านบน จากนั้นเราจะอัปเดตข้อมูลอ้างอิงทั้งหมดในโครงการที่ได้รับผลกระทบและพร้อมที่จะดำเนินการต่อไป

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