System.Web.Mvc가 참조 추가에없는 이유는 무엇입니까?


132

C #, Visual Studio 2010 사용

MSDN에 문서화 된 System.Web.Mvc 라는 네임 스페이스가 있습니다 . 해당 네임 스페이스의 모든 유형에 대한 설명서에는 해당 유형이 있습니다 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, Version = 4.0.0.0에 대한 참조 만 추가 할 수 있습니다. NuGet 설치 방법이 올바른 버전을 추가했습니다
NJS

101

가장 좋은 방법은 NuGet 패키지 관리자를 사용하는 것입니다.

아래 MVC 패키지를 업데이트하면 작동합니다.

여기에 이미지 설명을 입력하십시오


4
나는 이것이 대부분의 경우 MVC에 대한 참조를 추가하는 올바른 방법이라는 것을 인정해야합니다 (잘못된 참조로 인해 Visual Studio 외부에서 응용 프로그램을 실행하는 데 문제가 발생하지 않아야 함). 그러나 이미 MVC가 포함 된 일부 프로젝트의 일부 솔루션에서는 "솔루션 용 NuGet 패키지 관리"를 사용하여 동일한 버전의 라이브러리를 설치하는 것이 훨씬 좋습니다. 그 이유는 NuGet 패키지 관리자에서 방금 설치 한 경우 버전 비 호환성으로 이어질 수 있기 때문입니다 (관리자는 일반적으로 최신 버전을 제공합니다).
jahu

2
Visual Studio 2015로 컴파일 할 수없는 MVC 4를 사용하는 프로젝트에이 솔루션을 사용했습니다. 또한 모든 개발자가 프로젝트 라이브러리를 균일하게 유지할 수 있습니다.
ceetheman

1
VS2015 만있는 상자 에이 문제가 있었지만 다른 팀 구성원은 VS2013을 사용했습니다. 코드와 빌드 오류가없는 동안 이전 위치 (빌드 오류 없음)를 참조 할 수 있습니다. 참고로 오늘 현재 Microsoft.Web.Mvc를 찾을 수 없었습니다.이 문제는 문제의 원인이되었습니다. @forderah의 답변에서 NuGet에서 이름이 다르다는 사실에 대해 밝힙니다. Microsoft.Web.Mvc는 이제 Microsoft.AspNet.Mvc로, 그 / 그녀의 답변에 나열된 종속성을 가져옵니다.
qxotk

1
VS2017 에서이 문제가 발생하여 문제가 해결되었습니다. 확실하지 VS2017은 실제로 Microsoft.AspNet.Mvc을 찾고있는 동안 조립 필요가 참조 할 수 있음은 System.Web.Mvc을이라고 생각 말해 줬어 왜
마이클 데이비슨

60

같은 문제가 발생하여 System.Web.MVC 참조 어셈블리를 찾을 수 없었습니다.

마지막으로 발견하고 다음 위치에 있습니다.

VS가 C에 설치된 경우 : (때때로 MVC.dll이 모두가 말하는 기본 위치에 있지 않은 경우, " 참조 어셈블리를 의미합니다. 경우 C : 드라이브에 "폴더를 .)

거기에 없다면 분명히 여기에 있어야합니다.

\ 프로그램 파일 (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

이것은 정말로 도움이되었다; 그러나 마이크로 소프트는 이것을 훨씬 더 깨끗하고 쉽게 만들었을 것이다 ....
JosephDoggie

28

Nuget 패키지 관리자 콘솔에서 다음과 같이 추가 할 수도 있습니다.

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.Infrastructure (≥ 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가 있고 서로 인접하지 않습니다.
TTT

같은 이유로 System.Web.Mvc를 찾는 데 동일한 문제가 있습니다. 대신 Microsoft.AspNet.Mvc를 사용하여 솔루션의 다른 프로젝트가 버전 번호와 관련하여 사용하고 있는지 확인했습니다.
qxotk

5

"OK. Web.config에 해당 XML을 추가해도 작동하지만 질문에 대답하지 않습니다."

거기 있어야합니다. 기본적으로 추가 참조 목록은 정렬 된 것으로 보이지만 그렇지 않습니다. 이름 헤더를 누르고 다시 찾으십시오.


확신이 없으면 "이 어셈블리가 목록에서 누락되었습니다"라고 자주 말하지 않습니다.
Timwi

@Timwi 나는 생각했지만 다른 대답을 주었을 때 vs. 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 참조가 나열되지 않습니다. .Net Framework 4와 .Net Framework 4 Client Profile은 여기에서 다릅니다 .

.NET Framework 4 Client Profile은 클라이언트 응용 프로그램에 최적화 된 .NET Framework 4의 하위 집합입니다. WPF (Windows Presentation Foundation), Windows Forms, WCF (Windows Communication Foundation) 및 ClickOnce 기능을 포함한 대부분의 클라이언트 응용 프로그램에 대한 기능을 제공합니다. 이를 통해 .NET Framework 4 Client Profile을 대상으로하는 응용 프로그램을보다 빠르게 배포하고 설치 패키지를 줄일 수 있습니다.


이것은 좋은 팁이었습니다. 프로젝트 속성으로 갔을 때 .NET Core 1 및 2 만 나열되었습니다. .NET Framework 4.x는 없습니다. 내 목록에 어셈블리가 없습니다. .NET Framework 대신 .NET Core를 사용하기 위해 프로젝트를 구축 한 방법이 잘못되었습니다. 잘못된 옵션을 선택했습니다. 이제 차이점을 알고 있습니다. :)
vapcguy

4

"mvc"를 검색하여이 문제를 해결했습니다. System.Web.Mvc는 목록에 포함되어 있지 않지만 검색 결과에 나타납니다.


3

원하는 어셈블리가 이제 목록에 나타납니다.

나는 그것이 나타나는 원인을 추측 할 수 있지만 파일새로 만들기프로젝트ASP.NET 웹 응용 프로그램으로 간 적이 있다고 생각합니다. 이로 인해 일종의 늦은 초기화가 발생하고 목록에 웹 개발을위한 추가 어셈블리가 채워질 수 있습니다.


그것은 항상 항상 거기에 있었고, 그것의 ok : P ... 내가 대답에 추가 한 주석을 볼 수있는 링크에서 ".net 탭의 문제는 비동기가 발생하고 새로 고침되는 동안 알파벳순으로 정렬하지 않습니다 ... "... ... 2010 년에 새로운 행동으로, 나는 당신의 질문을 볼 때까지 그것을 결코 깨닫지 못했습니다.
eglasius

@egl 방금 내 컴퓨터 (VS2010)에서 테스트했는데 목록에 없습니다. Target Framework에 따라 다른 어셈블리 집합이 있지만이 어셈블리는 없습니다.
Roman Starkov

@romkyns는 .net 4를 타겟팅하고 내 답변에서 언급 한 작업을 수행합니다. 또한 비동기로드를 수행하므로로드하기에 충분한 시간을 제공하십시오.
eglasius

2

이것은 Visual Studio 2012에서 변경되었습니다 (원래 질문은 VS2010이라고 말하지만 제목은 여전히 ​​검색에서 나옵니다).

VS2012 MVC 프로젝트를 만들면 system.web.mvc가 솔루션의 피어 인 패키지 폴더에 배치됩니다. 이것은 기본적으로 웹 프로젝트에서 참조되며 정확한 경로를 찾을 수 있습니다).

보조 프로젝트 (예 : 필터 또는 기타 속성이있는 지원 .dll)에서이를 참조하려는 경우 여기에서 참조 할 수 있습니다.


2

VS 2012에서 System.Web.Mvc를 얻지 못했지만 VS 2013에서 얻었습니다. AddReference 대화 상자를 사용하여 여기에 이미지 설명을 입력하십시오

또는 프로젝트 경로에서 찾을 수 있습니다.

YourProjectName \ packages \ 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

"직장"은 지능을 제공합니까? 내 답변을 수정했습니다
기본

0

별도로 설치할 수 있으며 프레임 워크에 포함되어 있지 않으며 탭 목록 "extensions"를 선택하면 더 많은 다른 라이브러리가 있으며 오래된 라이브러리를 사용하는 데 필요하지 않습니다. 예전 20 30 및 4001


0

Visual Studio 2017에서이 문제가 발생하면 이전 버전의 VS에서 만든 MVC 4 프로젝트를 참조 힌트 경로가 가리키는 것으로 사용하고있을 가능성이 있습니다 C:\Program Files (x86)\Microsoft ASP.NET. Visual Studio 2017은이 디렉토리를 더 이상 설치하지 않습니다.

일반적으로 2017 인스턴스와 함께 Visual Studio 2015 사본을 설치하면 위의 경로에 필요한 라이브러리가 설치됩니다. 그런 다음 영향을받는 프로젝트의 모든 참조를 업데이트하고 계속 진행합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.