System.Web.Mvc Neden Referans Ekle'de listelenmiyor?


132

C # kullanarak, Visual Studio 2010.

MSDN'de belgelenen System.Web.Mvc adlı bir ad alanı vardır . Bu ad alanındaki tüm türler için belgeler, bunların içinde olduklarını söylüyor System.Web.Mvc.dll.

Ancak, Add Reference, ".NET" sekmesine gittiğimde, bu derleme listede eksik. Neden?


1
Açıklayabilir misiniz: projeniz bu referans olmadan çalışıyor mu? Web.config'inizde mi (cevabıma bakın)?
Temel

4
Herhangi bir proje üzerinde çalışmıyorum. StackOverflow'da birisine yardım etmek istedim. Herhangi bir tür için IntelliSense ve / veya F12'ye bakmak için genellikle bir referans eklerim. Bu durumda istenen montaj listede eksikti, bu yüzden nedenini sordum.
Timwi

1
Bu sayfanın okuyucuları için NOT - bugün (2015-02-09) itibariyle bunu çözme yöntemi zamanla değişti - tüm yanıtları okuyun - VS.NET ve .NET çerçevesinin çeşitli sürümleri, MVC için referans verilen kodu farklı yerlere.
qxotk

Yanıtlar:


106

VS Express 2012'de System.Web.Mvc'i "derlemeler" sekmesinde bulamadım, ancak biraz araştırdıktan sonra , varsayılan "derlemeler \ çerçeve yerine " derlemeler \ uzantılar "sekmesine bakmam gerektiğini öğrendim "sekmesi.


1
Senin için +1 çünkü yaşadığım sorunun temel nedenini buldun. Aşağıda yasaklanan NuGet yükleme yöntemini kullanmayı seçtim ve orada yaptıklarımı yorumlayacağım.
qxotk

Bu yöntemi Visual Studio Community 2015'te denedim ancak sürüm uyumsuzluğuyla ( Could not load file or assembly...The located assembly's manifest definition does not match the assembly reference) ilgili bir çalışma zamanı hatası aldım . Çözümümde farklı bir sürüme başvuran başka bir projem var ve bu yöntem yalnızca System.Web.Mvc, Sürüm = 4.0.0.0'a bir başvuru eklememe izin verdi.
NuGet

101

En iyi yol NuGet paket yöneticisini kullanmaktır.

Sadece aşağıdaki MVC paketini güncelleyin ve çalışmalıdır.

görüntü açıklamasını buraya girin


4
Bunun, çoğu durumda MVC'ye referans eklemenin doğru yolu olduğunu kabul etmeliyim (bu, uygulamayı Visual Studio dışında çalıştırırken kötü referansların neden olabileceği sorunları gidermelidir). Ancak, halihazırda MVC içeren bazı projeleri içeren büyük çözümlerde, kitaplığın aynı sürümünü yüklemek için "Çözüm için NuGet Paketlerini Yönet" seçeneğini kullanmak daha da iyidir. Bunun nedeni, onları NuGet paket yöneticisinden yüklerseniz, sürüm uyumsuzluğuyla karşılaşabilirsiniz (yönetici genellikle size en yeni sürümü sunar).
jahu

2
Bu çözümü, Visual Studio 2015 ile derlenemeyen MVC 4 kullanan bir proje için kullandım. Ayrıca proje kitaplıklarının tüm geliştiriciler arasında tek tip olmasını sağlar.
ceetheman

1
Bu sorunu, üzerinde yalnızca VS2015 bulunan bir kutuda yaşadım, diğer takım üyeleri VS2013'e sahipti - bu da eski konumu referans almalarına neden olabilir (derleme hatası yok), ancak koda sahip değildim ve hatalar oluşturdum. Not, bugün itibariyle soruna neden olan referanslar olan Microsoft.Web.Mvc'yi bulamadım. @Forderah'ın cevabında NuGet'te adın farklı olduğu gerçeğine ışık tutuyor. Microsoft.Web.Mvc artık Microsoft.AspNet.Mvc oldu ve yanıtında listelenen bağımlılıkları da çekiyor.
qxotk

1
VS2017'de bu sorunu bile yaşadım ve bu sorunu çözdü. Neden VS2017'nin bana Microsoft.AspNet.Mvc'yi ararken başvurulması gereken derlemenin System.Web.Mvc olduğunu düşündüğünü söylediğinden emin değilim
Michael Davidson

60

Aynı sorunu yaşadım ve System.Web.MVC referans derlemesini bulamadım.

Sonunda öğrendi ve aşağıdaki konumun içinde bulunuyordu.

VS'nizin C: 'de kurulu olup olmadığına dikkat edin (Bazen MVC.dll herkesin bahsettiği varsayılan konumda değildir , C: sürücüsünde bulunan " Referans Meclisleri " klasörünü kastediyorum .)

orada değilse, kesinlikle burada olmalıdır:

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

Bu nedenle, dll'yi gezinerek veya referans ekle menüsündeki gözat sekmesinden ekleyin.


1
Bu benim için referansı alır, ancak bu referansı daha önce Çerçeve Derlemeleri listesi aracılığıyla ekledim.
Zarepheth

9
VCS'li bir ekipte çalışıyorsanız, pek de iyi bir çözüm değil. Bu durumda mutlak yollar kötüdür.
Denis The Menace

Kesin kodlanmış mutlak yol bağımlılığı nedeniyle bunun herhangi bir takım geliştirme ortamında kötü bir çözüm olduğuna kesinlikle katılıyorum.
Craig

Bunu aşmanın yolu, herkesin DLL için aynı yolu kullanmasını sağlamaktır. Tüm ekip üyelerinin montajları olması gerektiği gibi bu konumda kurması sorun olmamalıdır. Alternatif olarak, DLL bu yoldan kopyalanabilir ve doğrudan projeye yerleştirilebilir, böylece göreceli bir yola sahip olur. Ancak her iki durumda da, sadece o DLL'nin bulunduğu yere sahip olmak iyi bir başlangıç ​​noktasıdır.
vapcguy

Bu gerçekten yardımcı oldu; ancak Microsoft bunu çok daha temiz ve kolay hale
getirmeliydi

28

Bunu Nuget Paket Yöneticisi Konsolundan da ekleyebilirsiniz, örneğin:

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

Microsoft.AspNet.Mvc şunlara bağımlıdır:

  • '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)'

... bu benim için önemli değil. Bizim durumumuzda bu, yalnızca Mvc uygulamalarımıza destek sağlamak için var olan bir sınıf kitaplığıdır. Yani bunun en kötü ihtimalle zararsız bir bağımlılık olduğunu düşünüyoruz.

Bunu kesinlikle dosya sistemindeki veya GAC'deki bir derlemeye işaret etmeye tercih ediyorum, çünkü gelecekte paketi güncellemek muhtemelen geçmişte GAC ve dosya sistemi birleştirme referanslarıyla yaşadığım deneyimlerden çok daha az zahmetli olacaktır.


1
Bu yöntemi kullandım ve referanslarda yerel mutlak yollar kullanmamaya katılıyorum. NuGet paket yöneticisini kullandım, paketi ve bağımlılıkları ekleyerek yalnızca VS2015 kutumdaki sorunu düzelttim.
qxotk

11

Ben de aynı sorunu yaşadım ve işte komik neden: Tahminim, listenin System.Web.Mvcaltında yer almayı umduğunuzdur System.Web. Ancak liste alfabetik değildir.

Önce listeyi sıralayın ve ardından System.Web.


1
Ayrıca doğru sürümü aldığınızdan emin olun. Benim durumumda System.Web.Mvc v2 ve v4 var ve onlar da yan yana değiller.
TTT

System.Web.Mvc'yi aynı nedenlerle bulmakta aynı sorun yaşadım. Bunun yerine Microsoft.AspNet.Mvc ile gittim ve çözümümdeki diğer projelerin sürüm numarası açısından ne kullandığını kontrol etmeyi sağladım.
qxotk

5

"Tamam, bu XML'yi Web.config konsoluna eklemek işe yarıyor, ancak soruyu yanıtlamıyor"

Orada olmalı. Varsayılan olarak referans ekleme listesi sıralı gibi görünür, ancak durum böyle değildir. Ad başlığına basın ve tekrar bakın.


Emin olmadığım sürece sık sık “bu meclis listede eksik” demiyorum.
Timwi

@Timwi, anladım, ancak diğer cevabı verince, 2010 vs kurulu olduğu için orada olmaması ihtimalinin çok az olduğunu ve benim durumumda her zaman ihtiyacım olanı referanslar listesinde bulduğum ad başlığına hiç basmadan bulduğumu düşündüm. söylemek gerekirse ... aslında, neden daha önce ve 2010'a kıyasla neden hiç yapmadığımı şimdi biliyorum - ilk yoruma bakın: weblogs.asp.net/scottgu/archive/2009/10/29/…
eglasius

Yani, Ad başlığını tıklamanın sizin için işleri sıraladığını mı söylüyorsunuz? Burada makinemde hiçbir şey yapmıyor ...
Roman Starkov

1
@romkyns yalnızca listedeki tüm derlemeler yüklendikten sonra çalışır.
eglasius

5

Şu adımı kontrol edin:

  1. MVC'nin doğru kurulup kurulmadığını kontrol edin.
  2. Projenin özelliğini kontrol edin ve projenin Hedef Çerçevesinin ne olduğunu görün. Hedef çerçeve .Net Framework 4 olarak ayarlanmadıysa, ayarlayın.

Not : Hedef çerçeve .Net Framework 4 İstemci Profili olarak ayarlanmışsa, MVC referansını referanslar listesinde listelemeyecektir. Sen .Net Framework 4 ve .Net Framework 4 İstemci Profili arasındaki farklı bulabilirsiniz burada .

.NET Framework 4 İstemci Profili, .NET Framework 4'ün istemci uygulamaları için optimize edilmiş bir alt kümesidir. Windows Presentation Foundation (WPF), Windows Forms, Windows Communication Foundation (WCF) ve ClickOnce özellikleri dahil çoğu istemci uygulaması için işlevsellik sağlar. Bu, daha hızlı dağıtım ve .NET Framework 4 İstemci Profili'ni hedefleyen uygulamalar için daha küçük bir yükleme paketi sağlar.


Bu iyi bir ipucuydu. Projemin özelliklerine gittiğimde sadece .NET Core 1 ve 2'yi listeledi. .NET Framework 4.x yok. Listemde montajları eksikti. NET Framework yerine .NET Core kullanmak için projemi - yanlış seçeneği seçtim - nasıl oluşturduğum ortaya çıktı. Şimdi farkı biliyorum. :)
vapcguy

4

Bu sorunu "mvc" arayarak çözdüm. System.Web.Mvc, listede yer almamasına rağmen arama sonuçlarında göründü.


3

İstenilen montaj şimdi listede göründü.

Sadece neyin ortaya çıkmasına neden olduğunu tahmin edebilirim, ancak daha önce hiç yapmadığım DosyaYeniProjeASP.NET Web Uygulaması'na gitmiş olmamdan şüpheleniyorum . Bunun bir tür geç başlatmaya neden olması ve listenin Web geliştirme için ek derlemelerle doldurulması mümkündür.


her zaman kesinlikle her zaman oradaydı, sorun değil: P ... cevabıma eklediğim yorumu görün, bağlantıda: ".net sekmesiyle ilgili sorun, async olurken ve yenilenirken, onun alfabetik sıraya göre sıralanmıyor ... "... 2010'a karşı yeni bir davranış, sorunuzu görene kadar bunu asla fark etmemiştim.
eglasius

@egl Makinemde az önce test ettim (VS2010) ve listede hiç yok. Hedef Çerçeveye bağlı olarak farklı montaj setleri alıyorum, ancak bu asla orada değil.
Roman Starkov

@romkyns .net 4'ü hedeflemeyi ve cevabımda bahsettiğim şeyi yapmayı deneyin. Ayrıca, eşzamansız bir yükleme yaptığı için yüklemesi için yeterli zaman ayırdığınızdan emin olun.
eglasius

2

Bu, Visual Studio 2012 için değişti (Orijinal sorunun VS2010 olduğunu biliyorum, ancak başlık yine de aramalara çarpacak).

Bir VS2012 MVC projesi oluşturduğunuzda system.web.mvc, çözümle eş olan paketler klasörüne yerleştirilir. Bu, varsayılan olarak web projesinde referans alınacaktır ve tam yolu orada bulabilirsiniz).

Buna ikincil bir projede başvurmak istiyorsanız (filtreler veya diğer özniteliklerle destekleyen bir .dll deyin), oradan ona başvurabilirsiniz.


2

System.Web.Mvc'yi VS 2012'de almadım ancak VS 2013'te aldım. AddReference İletişim Kutusunu kullanarak, görüntü açıklamasını buraya girin

Veya bunu proje yolunuzda bulabilirsiniz.

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


Mevcut proje yolunda nerede bulunacağını gösteren harika bir ipucu. Teşekkürler!
Alan

0

MVC derlemesine projenin kendisinde değil web.config dosyasında başvurulduğuna inanıyorum.

Bunun gibi bir şey:

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

Yorumunuza cevap vermek için;

Verebileceğim en iyi cevap buradan :

Add öğesi, dinamik bir kaynağın derlenmesi sırasında kullanılacak bir derleme başvurusu ekler. ASP.NET, her kod modülünü derlerken bu derlemeyi otomatik olarak kaynağa bağlar.


Tamam, bu XML'yi Web.config konsoluna eklemek işe yarıyor, ancak soruyu yanıtlamıyor.
Timwi

Intellisense sağladığı gibi "çalışır" mı? Cevabımı düzenledim
Temel

0

ayrı olarak kurulabilir ve çerçeveye dahil edilmez, sekme listesi "uzantıları" seçin ve daha başka kitaplıklar var, her şey tamam eski kitaplıkları kullanmak için gerekli değil, vb. eski 20 30 ve 4001 var


0

Bu sorunu Visual Studio 2017'de yaşıyorsanız, VS'nin önceki sürümünde oluşturulmuş bir MVC 4 projesiyle çalışıyor olma ihtimaliniz vardır ve bir referans ipucu yolu işaret eder C:\Program Files (x86)\Microsoft ASP.NET. Visual Studio 2017 artık bu dizini yüklemez.

Bunu genellikle 2017 örneğimizin yanına Visual Studio 2015'in bir kopyasını yükleyerek çözeriz ve bu, gerekli kitaplıkları yukarıdaki yola yükler. Ardından, etkilenen projelerdeki tüm referansları güncelliyoruz ve gitmeye hazırız.

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.