Mengapa System.Web.Mvc tidak terdaftar di Add Referensi?

132

Menggunakan C #, Visual Studio 2010.

Ada namespace yang disebut System.Web.Mvc yang didokumentasikan di MSDN. Dokumentasi untuk semua jenis di namespace mengatakan bahwa mereka ada di System.Web.Mvc.dll.

Namun, ketika saya pergi ke Tambahkan Referensi, tab ".NET", majelis ini hilang dari daftar. Mengapa?

Timwi
sumber
1
Bisakah Anda mengklarifikasi: apakah proyek Anda BEKERJA tanpa referensi itu? Apakah itu di web.config Anda (lihat jawaban saya)?
Basic
4
Saya tidak mengerjakan proyek apa pun. Saya hanya ingin membantu seseorang di sini di StackOverflow. Saya biasanya menambahkan referensi untuk melihat IntelliSense dan / atau F12 untuk semua jenis. Dalam hal ini majelis yang diinginkan tidak ada dalam daftar, jadi saya bertanya mengapa.
Timwi
1
CATATAN untuk pembaca halaman ini - mulai hari ini (2015-02-09) metode untuk menyelesaikan ini telah berubah dari waktu ke waktu - baca semua jawaban - berbagai versi kerangka kerja VS.NET dan .NET memindahkan kode yang dirujuk untuk MVC sekitar menjadi ke berbagai tempat.
qxotk

Jawaban:

106

Dalam VS Express 2012 saya tidak dapat menemukan System.Web.Mvc di tab "assemblies", tetapi setelah sedikit pencarian saya menemukan bahwa saya perlu melihat tab " assemblies \ extensions " daripada kerangka "assemblies \ framework" yang standar "tab.

jahu
sumber
1
Memberi +1 untuk Anda karena Anda menemukan akar penyebab masalah yang saya miliki. Saya memilih untuk menggunakan metode instalasi NuGet yang dilarang di bawah ini, dan saya akan mengomentari apa yang saya lakukan.
qxotk
Saya mencoba metode ini di Visual Studio Community 2015 tetapi saya mendapat kesalahan runtime terkait dengan ketidakcocokan versi ( Could not load file or assembly...The located assembly's manifest definition does not match the assembly reference). Saya punya proyek lain dalam solusi saya referensi versi yang berbeda, dan metode ini hanya memungkinkan saya untuk menambahkan referensi ke System.Web.Mvc, Versi = 4.0.0.0. Metode instalasi NuGet menambahkan versi yang benar
NJS
101

Cara terbaik adalah dengan menggunakan manajer paket NuGet.

Cukup perbarui paket MVC di bawah ini dan itu akan berfungsi.

masukkan deskripsi gambar di sini

sandeep talabathula
sumber
4
Saya harus mengakui bahwa ini adalah cara yang tepat untuk menambahkan referensi ke MVC dalam banyak kasus (ini akan membuat Anda kesulitan dengan menjalankan aplikasi di luar Visual Studio yang mungkin disebabkan oleh referensi buruk). Namun dalam solusi besar yang sudah mengandung beberapa proyek MVC, menggunakan "Kelola Paket NuGet untuk solusi" untuk menginstal versi perpustakaan yang sama bahkan lebih baik. Alasannya adalah, jika Anda hanya menginstalnya dari manajer paket NuGet, Anda mungkin berakhir dengan ketidakcocokan versi (manajer biasanya akan menawarkan kepada Anda versi terbaru).
jahu
2
Saya telah menggunakan solusi itu untuk proyek menggunakan MVC 4 yang tidak bisa dikompilasi dengan Visual Studio 2015. Ini juga memastikan bahwa perpustakaan proyek seragam di semua pengembang.
ceetheman
1
Saya punya masalah dengan kotak yang hanya memiliki VS2015 di atasnya, sementara anggota tim lain memiliki VS2013 - yang mungkin meminta mereka mereferensikan lokasi lama (tidak ada kesalahan build) sementara saya tidak memiliki kode dan membangun kesalahan. Dari Catatan, pada hari ini, saya tidak dapat menemukan Microsoft.Web.Mvc - yang merupakan referensi yang menyebabkan masalah. Dalam jawaban dari @forderah menyoroti fakta bahwa nama berbeda di NuGet. Microsoft.Web.Mvc sekarang adalah Microsoft.AspNet.Mvc, yang juga menarik dependensi yang tercantum dalam jawabannya.
qxotk
1
Saya bahkan punya masalah ini di VS2017, dan ini memperbaikinya. Tidak yakin mengapa VS2017 mengatakan kepada saya bahwa mereka berpikir bahwa perakitan yang perlu direferensikan adalah System.Web.Mvc sementara itu sebenarnya mencari Microsoft.AspNet.Mvc
Michael Davidson
60

Saya memiliki masalah yang sama dan tidak dapat menemukan perakitan referensi System.Web.MVC.

Akhirnya ditemukan dan terletak di dalam lokasi berikut.

Catatan jika VS Anda dipasang di C: (Kadang-kadang MVC.dll tidak di lokasi default yang dibicarakan semua orang, maksud saya folder " Kumpulan Referensi " yang terletak di drive C :.)

jika tidak ada, pasti ada di sini:

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

Jadi tambahkan dll melalui navigasi atau browse browse di menu tambah referensi.

Patrick Hofman
sumber
1
Ini mendapatkan referensi untuk saya, meskipun saya yakin saya sebelumnya telah menambahkan referensi ini melalui daftar Framework Assemblies.
Zarepheth
9
Bukan solusi yang benar-benar bagus jika Anda bekerja dalam tim dengan VCS. Jalan absolut itu jahat dalam kasus ini.
Denis The Menace
Sangat setuju bahwa ini adalah solusi buruk dalam segala jenis lingkungan pengembangan tim karena ketergantungan jalur absolut hard-coded.
Craig
Cara Anda menyiasatinya adalah memastikan semua orang menggunakan jalur yang sama untuk DLL. Seharusnya tidak menjadi masalah jika semua anggota tim memasang rakitan di lokasi itu, sebagaimana seharusnya. Atau, DLL dapat disalin dari jalur itu, dan ditempatkan langsung ke proyek, sehingga memiliki jalur relatif. Namun demikian, hanya memiliki lokasi di mana DLL berada, adalah titik awal yang baik.
vapcguy
Ini sangat membantu; tetapi Microsoft seharusnya membuat ini jauh lebih bersih dan mudah ....
JosephDoggie
28

Anda juga dapat menambahkan ini dari Nuget Package Manager Console, seperti:

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

Microsoft.AspNet.Mvc memiliki ketergantungan pada:

  • 'Microsoft.AspNet.WebPages (≥ 2.0.20710.0 && <2.1)'
  • 'Microsoft.Web.Infrastructure (≥ 1.0.0.0)'
  • 'Microsoft.AspNet.Razor (≥ 2.0.20710.0 && <2.1)'

... yang sepertinya bukan masalah besar bagiku. Dalam kasus kami, ini adalah perpustakaan kelas yang ada hanya untuk memberikan dukungan untuk aplikasi Mvc kami. Jadi, kami pikir itu adalah ketergantungan yang tidak berbahaya.

Saya pasti lebih suka ini menunjuk ke sebuah rakitan pada sistem file atau di GAC, karena memperbarui paket di masa depan kemungkinan akan jauh lebih menyakitkan daripada pengalaman yang saya miliki dengan GAC dan referensi rakitan sistem file di masa lalu.

fordareh
sumber
1
Saya menggunakan metode ini, dan saya setuju untuk tidak menggunakan jalur absolut lokal dalam referensi. Saya menggunakan manajer paket NuGet, menambahkan paket dan dependensi memperbaiki masalah pada kotak VS2015 saya saja.
qxotk
11

Saya memiliki masalah yang sama dan inilah alasan lucu: Dugaan saya adalah Anda berharap System.Web.Mvcberada System.Webdi bawah daftar. Tetapi daftar ini tidak berdasarkan abjad.

Pertama, sortir daftar dan kemudian lihat di dekat System.Web.

Orang amerika
sumber
1
Pastikan juga Anda mendapatkan versi yang benar. Dalam kasus saya System.Web.Mvc v2 dan v4 ada di sana, dan mereka juga tidak bersebelahan.
TTT
Punya masalah yang sama menemukan System.Web.Mvc untuk alasan yang sama. Saya pergi dengan Microsoft.AspNet.Mvc sebagai gantinya, memastikan untuk memeriksa untuk melihat apa proyek lain dalam solusi saya gunakan sehubungan dengan nomor versi.
qxotk
5

"Oke, menambahkan XML itu ke Web.config berfungsi, tetapi tidak menjawab pertanyaan"

Itu harus ada di sana. Secara default, daftar tambahkan referensi tampaknya dipesan, tetapi tidak demikian halnya. Tekan tajuk nama dan lihat lagi.

eglasius
sumber
Saya tidak sering mengatakan "majelis ini tidak ada dalam daftar" kecuali saya yakin akan hal itu.
Timwi
@Timwi saya pikir, tetapi diberi jawaban lain, bahwa ada v. Sedikit kemungkinannya tidak ada dengan vs 2010 diinstal dan bahwa dalam kasus saya, saya selalu menemukan apa yang saya butuhkan dalam daftar referensi tanpa pernah menekan header nama yang saya miliki untuk mengatakannya ... pada kenyataannya, saya sekarang tahu mengapa saya tidak pernah melakukannya sebelumnya dan dalam vs 2010 saya lakukan - lihat komentar pertama: weblogs.asp.net/scottgu/archive/2009/10/29/…
eglasius
Jadi, apakah Anda mengatakan bahwa mengklik tajuk Nama memilah sesuatu untuk Anda? Tidak melakukan apa pun di komputer saya ...
Roman Starkov
1
@romkyns hanya berfungsi setelah semua majelis dalam daftar dimuat.
eglasius
5

Periksa langkah ini:

  1. Periksa MVC diinstal dengan benar.
  2. Periksa properti proyek dan lihat apa itu Kerangka Target proyek. Jika kerangka kerja target tidak diatur ke .Net Framework 4, atur.

Catatan : jika kerangka kerja target diatur ke Profil Klien .Net Framework 4, itu tidak akan mencantumkan referensi MVC pada daftar referensi. Anda dapat menemukan perbedaan antara Profil Klien .Net Framework 4 dan .Net Framework 4 di sini .

Profil Klien .NET Framework 4 adalah bagian dari .NET Framework 4 yang dioptimalkan untuk aplikasi klien. Ini menyediakan fungsionalitas untuk sebagian besar aplikasi klien, termasuk Windows Presentation Foundation (WPF), Windows Forms, Windows Communication Foundation (WCF), dan fitur ClickOnce. Ini memungkinkan penyebaran yang lebih cepat dan paket instalasi yang lebih kecil untuk aplikasi yang menargetkan Profil Klien .NET Framework 4.

Iman
sumber
Ini tip yang bagus. Ketika saya pergi ke properti proyek saya, itu hanya terdaftar. NET Core 1 dan 2. Tidak .NET Framework 4.x. Saya kehilangan majelis dalam daftar saya. Ternyata itu adalah bagaimana saya membangun proyek saya - saya memilih opsi yang salah - untuk menggunakan .NET Core, bukan .NET Framework. Sekarang saya tahu bedanya. :)
vapcguy
4

Saya memecahkan masalah ini dengan mencari "mvc". System.Web.Mvc muncul di hasil pencarian, meskipun tidak ada dalam daftar.

Zety
sumber
3

Perakitan yang diinginkan telah muncul dalam daftar sekarang.

Saya hanya bisa berspekulasi apa yang menyebabkannya muncul, tetapi saya menduga itu adalah fakta bahwa saya membuka FileNewProjectASP.NET Web Application , yang belum pernah saya lakukan sebelumnya. Ada kemungkinan bahwa ini menyebabkan semacam inisialisasi terlambat terjadi dan daftar untuk diisi dengan majelis tambahan untuk pengembangan Web.

Timwi
sumber
itu selalu pasti selalu ada di sana, tidak apa-apa: P ... lihat komentar yang saya tambahkan ke jawaban saya, di tautan itu tertulis: "Masalah dengan tab .net, sementara async sedang terjadi dan sedang disegarkan, itu tidak mengurutkan dalam urutan abjad ... "... yang merupakan perilaku baru vs 2010, saya tidak pernah menyadari bahwa sampai saya melihat pertanyaan Anda.
eglasius
@egl Saya baru saja menguji pada mesin saya di sini (VS2010) dan tidak ada dalam daftar sama sekali. Saya memang mendapatkan set majelis yang berbeda tergantung pada Target Framework, tetapi yang ini tidak pernah ada.
Roman Starkov
@romkyns mencoba menargetkan .net 4, dan melakukan apa yang saya sebutkan dalam jawaban saya. Pastikan juga untuk memberikan waktu yang cukup untuk memuat, karena memang memuat async.
eglasius
2

Ini telah berubah untuk Visual Studio 2012 (saya tahu pertanyaan asli mengatakan VS2010, tetapi judulnya masih akan mengenai pencarian).

Ketika Anda membuat proyek VS2012 MVC, system.web.mvc ditempatkan di folder paket yang peer to the solution. Ini akan dirujuk dalam proyek web secara default dan Anda dapat menemukan jalur yang tepat di sana).

Jika Anda ingin merujuk ini dalam proyek sekunder (katakanlah .dll pendukung dengan filter atau atribut lainnya), maka Anda dapat merujuknya dari sana.

Prof Von Lemongargle
sumber
2

Saya tidak mendapatkan System.Web.Mvc di VS 2012 tapi saya mendapatkannya di VS 2013. Menggunakan Dialog AddReference, masukkan deskripsi gambar di sini

Atau, Anda dapat menemukan ini di jalur proyek Anda,

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

Md Shahriar
sumber
Kiat hebat yang menunjukkan tempat mencari di jalur proyek yang ada. Terima kasih!
Alan
0

Saya yakin Anda akan menemukan perakitan MVC direferensikan dalam file web.config, bukan dalam proyek itu sendiri.

Sesuatu seperti ini:

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

Untuk menanggapi komentar Anda;

Jawaban terbaik yang bisa saya berikan adalah dari sini :

Elemen add menambahkan referensi perakitan untuk digunakan selama kompilasi sumber daya dinamis. ASP.NET secara otomatis menautkan unit ini ke sumber daya saat mengkompilasi setiap modul kode.

Dasar
sumber
OK, menambahkan XML itu ke Web.config berfungsi, tetapi tidak menjawab pertanyaan.
Timwi
"Bekerja" karena di dalamnya memberikan intellisense? Saya telah mengedit jawaban saya
Dasar
0

itu dapat diinstal secara terpisah, dan itu tidak termasuk dalam bingkai, pilih daftar tab "ekstensi" dan ada dan ada lebih banyak lib lainnya, semua ok tidak diperlukan untuk menggunakan lib lama dll, ada yang lama 20 30 dan 4001

pengguna1005462
sumber
0

Jika Anda mengalami masalah ini di Visual Studio 2017, kemungkinan Anda sedang bekerja dengan proyek MVC 4 yang dibuat di versi VS sebelumnya dengan jalur petunjuk referensi yang menunjuk ke C:\Program Files (x86)\Microsoft ASP.NET. Visual Studio 2017 tidak menginstal direktori ini lagi.

Kami biasanya menyelesaikan ini dengan menginstal salinan Visual Studio 2015 di samping contoh 2017 kami, dan yang menginstal perpustakaan yang diperlukan di jalur di atas. Kemudian kami memperbarui semua referensi di proyek yang terkena dampak dan kami siap melakukannya.

JD Mallen
sumber