ASP를 어떻게 뿌릴 겁니까?기존 웹 사이트 프로젝트에 MVC를 넣을 수 있습니까?
나는 유산(haha) ASP를 가지고 있습니다.Visual Studio 2008 SP1의 Net Webforms Web Site Project에서 MVC 기능을 점진적으로 도입하고자 합니다.
ASP를 통합하는 방법에 대해 제가 찾을 수 있는 대부분의 정보입니다.웹 양식을 사용하는 Net MVC는 웹 응용 프로그램 프로젝트의 사용을 가정하는 것으로 보입니다.그러나 ASP를 사용하여 기존 ASP.net 웹 사이트 프로젝트를 개조하는 방법에 대한 정보를 찾는 것은 불가능한 것 같습니다.순 MVC 기능.
나는 Scott Hanselman의 글과 그가 곧 출간할 책의 13장을 검토했는데, 둘 다 웹 애플리케이션 프로젝트 유형을 가정하고 있습니다.
가능한가요?이것에 대한 방법을 아는 사람이 있습니까?
우선 웹 양식 프로젝트에 MVC를 추가하는 것은 꽤 간단합니다. MVC용 VS 2008의 기능을 얻기 위해서는 작업이 조금 더 필요합니다(여전히 쉽습니다).먼저 어셈블리를 참조하고 를 사용하고 있는지 확인합니다.순 3.5.둘째, 현재 웹 양식 프로젝트에서 컨트롤러 폴더 및 보기 폴더를 만들 수 있습니다.인덱스 작업으로 간단한 컨트롤러를 만들 수도 있습니다.그런 다음 global.ascx 파일에서 경로를 설정/구성합니다.당신은 거기서부터 준비가 되어 있어야 합니다.참고를 위해 여기를 확인하세요.
그러나 코드 뒤에 있는 aspx 페이지만 생성할 수 있습니다(이 페이지를 삭제하고 마크업에서 올바른 상속 클래스를 입력할 수 있음).프로젝트 유형을 실제로 "변환"하여 MVC 및 비주얼 스튜디오(새로운 뷰 추가, 컨트롤러로 이동 등)의 장점을 얻을 수 있습니다.VS 2008에서 새로운 MVC 프로젝트와 새로운 Web App 프로젝트를 만들고 .csproj 파일을 평문으로 비교하는 것이 가장 좋은 조언입니다.프로젝트 템플릿을 VS에게 알려주는 긴 문자열 값이 있습니다.
이게 효과가 있다는 걸 믿으세요.저는 예전에 제 유산 프로젝트에서 해본 적이 있습니다.시행착오/제거 외에 프로젝트 유형 "키"를 어떻게 발견했는지 기억이 나지 않습니다.ASP.Net MVC는 웹 양식과 같은 프로젝트에서 좋은 역할을 합니다.
업데이트: .csproj 파일의 PropertyGroup에 있는 것들을 사용하면 아직 웹 어플리케이션인 MVC 프로젝트 유형으로 변경할 수 있을 것 같습니다.현재 파일과 비교하여 다른 파일을 변경하십시오. 파일을 복사/백업해야 합니다.
<ProjectGuid>{B99EC98A-1F09-4245-B00D-5AF985190AA9}</ProjectGuid>
<ProjectTypeGuids>{603c0e0b-db56-11dc-be95-000d561079b0};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
업데이트 2: 프로젝트에 큰 영향을 미치거나 영향을 미치지는 않을 것입니다.만약 여러분이 그것에 대해 불편하다면 백업을 하고 장난을 칩니다.변경 사항이 발생하면 항상 백업이 실행됩니다.저는 처음에는 회의적이었지만 MVC의 길을 가게 되어 기뻤습니다.
Visual Studio 2010 SP1 / NuGet / Scott Hanselman의 전혀 지원되지 않는 유틸리티를 사용하여 업데이트된 답변을 제공하려고 생각했습니다.
- MVC3 설치(nuget 포함) http://www.asp.net/mvc/mvc3
- Visual Studio의 "Tools" 메뉴로 이동하여 "Library Package Manager" \ "Package Manager Console"을 선택합니다.
- 콘솔 창이 나타나면 "기본 프로젝트"를 웹 양식 프로젝트로 변경합니다.
- "Install-Package AddMvc3ToWebForms"(http://nuget.org/List/Packages/AddMvc3ToWebForms) 를 입력합니다.
이렇게 하면 프로젝트에 필요한 모든 dll, javascript 파일, web.config 설정 변경 등이 추가됩니다.모든 것이 성공적이라면 F5를 누르고 웹사이트의 "집"으로 이동한 후 mvc가 제공하는 샘플 양식을 볼 수 있습니다. "ASP에 오신 것을 환영합니다.NET MVC, 전혀 지원되지 않는 NuGet 패키지로 업그레이드!보증 없음!"
WebSite 프로젝트의 경우 루트가 아니라 App_Code에 컨트롤러만 추가하면 됩니다.csproj 파일 없이 MVC를 사용하는 것을 알 수 없기 때문에 VS의 장점을 놓치겠지만 실제로는 작동하게 될 것입니다.
컨트롤러와 ViewPage에서 상속하는 것만 기억하면 됩니다.
ASP가 꽤 컸습니다.NET 웹 사이트(웹 애플리케이션이 아님)에서 MVC3를 추가하려고 했습니다.프로젝트의 종류를 변경할 수 있는 선택권이 없어서 웹사이트(asp.net 4.0)로 갈 수밖에 없었습니다.
저는 별도의 MVC 프로젝트를 사용하지만 자체 웹 애플리케이션이기 때문에 사용하는 것이 아니라 이전 웹 사이트 내에서 어셈블리로 사용합니다.
다음은 제가 한 일의 개요입니다.
- Visual Studio 2010에서 새로운 MVC3 웹 애플리케이션을 만들었고, 빈 템플릿과 레이저 뷰 엔진을 사용했습니다.
- 기존 웹사이트로 솔루션에 추가했습니다.
- 조립품의 출력 경로를 로컬 bin 디렉토리에서 웹사이트의 bin 디렉토리로 변경하였습니다.
- MVC 앱에서 'Content'와 'Scripts' 폴더를 제거했습니다.콘텐츠와 스크립트 모두 이미 제 웹 사이트의 일부이며 MVC '페이지'에서도 참조할 수 있습니다.
- 프로젝트에서 Global.asax.* 파일을 제거했습니다.저는 웹사이트에서 Global.asax를 사용하고 있습니다.
- 저는 'Views' 폴더와 하위 폴더를 웹 사이트에 복사했습니다.이 파일들은 어셈블리의 일부가 아닌 실제 파일이므로 MVC 어셈블리를 구축하는 프로젝트가 아니라 웹 사이트 내에 존재해야 합니다.
- 이 시점에서 MVC 프로젝트에서 'Views' 폴더를 삭제할 수 있었지만, 이 프로젝트 유형에서만 새로운 뷰를 추가할 수 있는 Visual Studio 지원을 받습니다.그래서 저는 때때로 여기에 보기를 만든 다음 웹 사이트로 옮깁니다.제 웹사이트에서 cshtml 파일을 편집할 때도 인텔센스를 완전히 받습니다.
웹 사이트에 라우팅을 추가했습니다.방금 내 웹사이트의 global.asax에 있는 MVC global.asax에서 코드를 복사했습니다.우리는 몇 가지 용도가 필요합니다.
using System.Web.Mvc; using System.Web.Routing;
Application_Start에서 다음이 필요합니다.
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
그런 다음 일반적인 라우팅 방법을 추가합니다.
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// your routes
}
다음으로 웹 사이트의 web.config에 몇 가지를 추가합니다.시스템에서.컴파일중인 웹은 다음과 같은 어셈블리가 필요합니다.
<assemblies>
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Helpers, Version=1.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=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>
처음에 web.config에 MVC 네임스페이스도 추가했지만, 그것들이 없어도 잘 작동하는 것 같습니다.
이제 Global.asax에서 새 경로를 웹 사이트에 생성한 다음 MVC 프로젝트에 해당 컨트롤러를 추가한 다음 웹 사이트로 돌아가서 해당 보기를 추가합니다.뷰와 라우팅이 웹 사이트에 정의되어 있는 동안 논리는 모두 어셈블리에 있습니다.
중단점을 설정하여 MVC 컨트롤러에 디버그할 수 있지만 웹 사이트를 시작하여 디버그할 수 있습니다.
제안된 MVC 기본 경로를 사용하는 경우:
routes.MapRoute("Default", "{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
www.mysite.com 로 전화하면 홈 컨트롤러의 내용이 제공됩니다. 이전 기본값.aspx 홈 페이지가 아니라 홈 컨트롤러/뷰로 표시되므로, 저는 그런 경로를 사용하지 않습니다.기존 물리적 폴더 및 파일과 충돌하는 경로의 경우, 경로에 정규식이 포함된 제약 조건을 사용하여 이러한 충돌을 제외합니다.
웹 사이트에서 마스터 페이지를 사용하더라도, 공통 페이지 부분에 대한 실제 html은 다른 어셈블리에서 코드로 작성됩니다.내 _ViewStart.cshtml 또는 기본 컨트롤러에서 동일한 메서드를 호출할 수 있습니다.
지금까지 저는 이 접근법에 대해 부정적인 것을 보지 못했습니다.
web.config에서 라우팅을 설정하고 필요한 디렉토리 구조를 설정하고 global.asax에서 올바른 경로를 추가하는 한 이론적으로 모든 웹 프로젝트에 MVC 항목을 추가할 수 있습니다.제가 알기로는 그것이 작동하기 위한 유일한 요건입니다.
하지만 이 둘의 조합은 조금 혼란스럽고 장기적으로 유지하기 어려울 수 있습니다.기존의 모든 웹 양식 사이트 콘텐츠를 하위 폴더로 이동하여 방해되지 않도록 하고 사이트의 루트 디렉터리를 깨끗하게 유지하여 어수선함을 줄이고 상황을 더 명확하게 할 수 있습니다.
웹 프로젝트가 아닌 asp.net 웹 사이트에 MVC 3를 추가하려면 Scott Hanselman의 AddMvc3ToWebForms nuget 패키지를 사용하면 99%의 효과를 얻을 수 있지만 설치 중 오류가 발생하여 무시할 수 있습니다(적어도 테스트에서는 이 경우가 해당되는 것 같습니다). 설치 후 몇 가지 간단한 단계가 필요합니다.
http://delradiesdev.blogspot.com/2011/08/adding-mvc-3-to-aspnet-web-site.html 의 전체 세부 정보
표시(@delradie)
MVC2 응용 프로그램을 마이그레이션하는 동안 제가 배운 점은 프로젝트에 Default.aspx가 필요하다는 것입니다.저는 기존 웹 서비스 프로젝트에 몇 가지 GUI 기능을 추가하는 일을 맡았으므로 default.aspx는 없었습니다.왜 내 경로가 설정되지 않는지 알아내는데 시간이 좀 걸렸습니다.
마이크로소프트.웹 개발에 관한 NET 4.0 시험(70-519)은 준비 자료에 거의 이와 같은 정확한 문제가 있습니다.그렇다면 마이크로소프트에 따르면 답은 다음과 같습니다.
- 웹 양식 웹 사이트를 웹 응용 프로그램(즉, 웹 앱 프로젝트)으로 변환합니다.
- ASP에 대한 참조를 추가합니다.웹 앱의 구성 파일에 "NET MVC 2 Assembly"가 있습니다.
이 정보는 고용주가 구입한 유료 자료이므로 링크할 수 있는 웹 페이지가 명확하게 명시되어 있지는 않습니다.
언급URL : https://stackoverflow.com/questions/571315/how-would-you-sprinkle-in-asp-net-mvc-into-an-existing-web-site-project
'programing' 카테고리의 다른 글
도커 컴포지트를 사용하여 단일 컨테이너를 재시작하는 방법 (0) | 2023.10.25 |
---|---|
CMake - 정적 라이브러리 작성 (0) | 2023.10.25 |
R's magrittr의 python에서 %>%와 같은 기능 파이프 (0) | 2023.10.25 |
클랑이 더 많이 사용되지 않는 이유는 무엇입니까? (0) | 2023.10.25 |
printf는 char 배열에서 16진수 인쇄에 'FFFFFF'를 추가합니다. (0) | 2023.10.25 |