ASP.NET 3.5 웹 사이트 (비주얼 스튜디오 용어)가 있지만 사이트는 계속 성장하고 있으며 다른 것들 중에서도 카우보이처럼 보입니다. 이것이 웹 애플리케이션 (네임 스페이스 및 모두)으로 변환되는 것을보고 싶습니다.
Visual Studio에서 쉽게 수행 할 수있는 작업입니까? 그렇지 않다면 모든 네임 스페이스 등을 자동으로 생성 할 수있는 다른 도구가 있습니까?
ASP.NET 3.5 웹 사이트 (비주얼 스튜디오 용어)가 있지만 사이트는 계속 성장하고 있으며 다른 것들 중에서도 카우보이처럼 보입니다. 이것이 웹 애플리케이션 (네임 스페이스 및 모두)으로 변환되는 것을보고 싶습니다.
Visual Studio에서 쉽게 수행 할 수있는 작업입니까? 그렇지 않다면 모든 네임 스페이스 등을 자동으로 생성 할 수있는 다른 도구가 있습니까?
답변:
음, "웹 사이트"에 "웹 응용 프로그램으로 변환"옵션이 존재하지 않는 것으로 밝혀졌습니다. "웹 응용 프로그램으로 변환"옵션은 "웹 응용 프로그램"에만 존재합니다 !!!!
[내 강조]
따라서 여기에 거래가 있습니다. 변환을 수행하려면 다음을 수행해야합니다.
VS 2008 솔루션에 새 "웹 응용 프로그램"을 추가합니다 (파일-> 추가-> 새 프로젝트-> C #-> 웹-> ASP.NET 웹 응용 프로그램).
그런 다음 이전 "웹 사이트"의 모든 파일을 새로 만든 "웹 응용 프로그램"에 복사하고 기본적으로 생성 된 모든 파일을 재정의합니다.
다음 단계는 가장 추악합니다. "웹 사이트"의 참조를 새 "웹 응용 프로그램"에 "수동으로"추가해야합니다. VS 2008 PowerCommands 장난감이 다른 프로젝트 유형의 참조를 복사하기 때문에이 작업을 수행 할 것이라고 생각했지만 그렇지 않았습니다. 직접 수동으로 수행해야하며 동일한 어셈블리 (제 경우 AJAXToolkit과 같은)의 여러 버전이 있거나 GAC 및 로컬 버전이 둘 다있는 어셈블리 등이있는 경우이 단계에서주의해야합니다.
마지막 단계를 계속 반복하고 "웹 애플리케이션"을 빌드하십시오. " '....'is unknown namespace. You are missing an assembly reference?"와 같은 오류가 계속 발생합니다. '....'이 사용하는 서버 컨트롤의 ID로 대체 된 것 외에는 아무것도 없는지 확인하십시오. 즉, .DESIGNER.CS 또는 .DESIGNER.VB 파일 누락으로 인해 존재하는 오류 만 발생할 때까지 참조를 추가하고 프로젝트를 빌드하십시오.
그런 다음 VS 2008 솔루션 탐색기의 "웹 응용 프로그램"루트 프로젝트 노드로 이동하여 마우스 오른쪽 단추로 클릭하면 "웹 응용 프로그램으로 변환"옵션을 찾을 수 있습니다. 이 옵션이하는 일은 실제로 페이지 및 컨트롤의 "@Page"및 "@Control"지시문을 약간 변경하고 필요한 .DESIGNER.CS 또는 .DESIGNER.VB 파일을 만드는 것입니다.
"웹 응용 프로그램"을 다시 빌드하십시오. 오류가 발생하면 누락 된 참조를 확인하거나 "웹 애플리케이션으로 변환"을 다시 클릭하십시오. 때로는 누락 된 DESIGNER 파일로 인한 오류 이외의 오류가있는 경우 모든 페이지 / 컨트롤에 해당 DESIGNER 파일이 생성되지는 않습니다. 비 DESIGNER 문제를 수정하고 "웹 응용 프로그램으로 변환"을 다시 클릭하면이 작업을 수행해야합니다.
성공적인 VS 빌드가 완료되면 준비가 된 것입니다. 웹 애플리케이션 테스트를 시작하십시오. 선택적으로 VS 2008 솔루션 탐색기에서 "웹 응용 프로그램"루트 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 "속성"을 클릭 한 다음 "웹"탭으로 이동하여 "웹 응용 프로그램"을 IIS의 가상 폴더로 설정할 수 있습니다 (새로 만들 수 있습니다. VS의 가상 디렉터리). 이전 "웹 사이트"에서 사용한 IIS 가상 디렉터리를 사용하려면 먼저 IIS에서 해당 가상 디렉터리를 제거해야합니다.
업데이트 : 페이지를 테스트 할 때 "App_Code"폴더에있는 클래스, 특히 네임 스페이스가없는 클래스에 가장주의를 기울이십시오. 큰 함정이 될 수 있습니다. 네임 스페이스가없는 동일한 정적 클래스에서 두 개의 확장 메서드 오버로드에 문제가있었습니다. 하나는 DateTime을 확장합니까? (Nullable) DateTime 자체를 확장하는 다른 오버로드를 호출합니다. 확장 메서드로 다른 오버로드를 호출하면 VS 2008 컴파일이 통과되고 런타임에서만 컴파일 오류가 발생했습니다 (IIS 사용). 다른 오버로드에 대한 호출을 확장 메서드로 호출하는 것에서 일반 정적 메서드로 호출하는 것으로 변경하면 (동일한 클래스의 호출 만 변경하고 다른 클래스의 호출은 확장 메서드 호출로 남아 있음)이 문제를 해결했지만 분명히 그렇지는 않습니다. VS 2005에서와 같이 안전합니다.
업데이트 2 : 변환하는 동안 VS 2008은 "App_Code"의 이름을 "Old_App_Code"로 바꿉니다. 이 새 이름은보기 흉하게 들리지만 다시 이름을 바꾸지 마십시오. "웹 응용 프로그램"모델에서 모든 코드는 하나의 어셈블리에 있습니다. 런타임에서 웹 서버는 사용중인 웹 프로젝트 유형을 알지 못합니다. "App_Code"폴더의 모든 코드를 가져 와서 새 어셈블리를 만듭니다. 이렇게하면 "App_Code"라는 폴더에 코드가있는 경우 동일한 형식이 VS에서 만든 어셈블리와 IIS / ASP.NET 개발 서버에서 만든 어셈블리의 두 어셈블리에 존재한다는 RUNTIME 컴파일 오류가 발생합니다. . 그것을 피하기 위해. "Old_App_Code"를 같은 이름으로 두거나 이름을 ANYTHING EXCEPT : "App_Code"로 변경합니다. 이러한 "App_Code"에 코드를 넣지 마십시오.
이전부터 알고 있지만 "웹 사이트"모델을 오랫동안 사용하지 않았기 때문에 지금은 잊어 버렸습니다.
웹 사이트 애플리케이션이 커지면 .. 여러 프로젝트로 분할하는 것이 좋습니다. 웹 사이트 프로젝트에서 웹 애플리케이션 프로젝트로의 변환은별로 도움이되지 않습니다.
VS 2010에서 새 웹 응용 프로그램을 만듭니다.
1. Windows 탐색기를 사용하여 모든 파일을 프로젝트 폴더에 복사합니다.
2. VS 2010 솔루션 탐색기에서 모든 파일을 표시합니다.
3. 파일 및 폴더를 선택하고 프로젝트에 포함을 마우스 오른쪽 버튼으로 클릭합니다.
4. 프로젝트 솔루션 탐색기를 마우스 오른쪽 단추로 클릭하고 웹 응용 프로그램으로 변환을 선택합니다.
App_Code 폴더의 이름이 old_app_code로 변경되는 것과 같은 몇 가지 작은 차이점이 있습니다. 놀랍게도 오류가 발생하지 않습니다. 개체 데이터 소스의 TypeName과 @Page 태그의 상속에는 [ProjectName]이 필요할 수 있습니다. 접두사는 전역 적으로 추가됩니다. 예를 들어 유형 이름이 "BusinessLogic.OrderManager"이고 프로젝트 이름이 InventorySystem 인 경우이를 InventorySystem.BusinessLogic.OrderManager로 변경해야합니다. 또한 필수 필드 유효성 검사기와 같은 몇 가지 디스플레이 변경 사항은 더 이상 빨간색 글꼴로 기본 설정되지 않고 기본적으로 검은 색으로 설정됩니다.
처음에는 같은 문제에 직면했습니다. Wrox Professional ASP.NET 4.0 책을 읽은 후 다음과 같은 해결책을 찾았습니다.
먼저 새 웹 애플리케이션을 만들었습니다. 모든 웹 사이트 파일을 웹 응용 프로그램 폴더에 복사했습니다. 애플리케이션을 마우스 오른쪽 버튼으로 클릭하고 웹 애플리케이션으로 변환을 클릭합니다.
웹앱을 웹앱으로 변환해야하는 이유를 물어볼 수 있습니다. 대답은 웹 사이트를 만들 때 필요한 곳에 .cs 파일을 코딩하는 것입니다. 그러나 웹 애플리케이션은 코드 및 디자인 섹션에 대해 .design.cs (또는 .vb) 및 .cs 파일을 자동으로 선언합니다.
NEXT : PAGE 지시문의 'Inherits'속성과 같은 웹 사이트의 다른 파일에 대한 모든 수동 참조를 제거하십시오. 네임 스페이스는 클래스를 중앙에서 참조 할 것입니다.
프로젝트에 OBJ 및 BIN 폴더를 포함하지 않았기 때문에 문제에 직면했습니다. BIN 및 OBJ 폴더가 누락되었다고 생각되면 솔루션 탐색기에서 '모든 파일 표시'아이콘을 클릭 한 다음 누락 된 폴더를 마우스 오른쪽 단추로 클릭하고 프로젝트에 추가하십시오. (프로젝트와 함께 컴파일되도록합니다.)
업데이트 :
@deadlychambers가 주석에서 지적했듯이 : "Ctrl + Shift + F"를 수행하여 모든 곳에서 검색 한 다음 Inherits="(.*?)"
. 이것은 모든 발생을 찾고 아마도 시간을 절약 할 것입니다!
이제 하나의 웹 사이트 프로젝트를 웹 응용 프로그램으로 성공적으로 마이그레이션했으며주의해야 할 몇 가지 문제가 있습니다.
ReSharper를 마음대로 사용하면 aspx 파일을 리팩토링하는 데 많은 도움이됩니다.
public partial class FolderName_Projectname : Page
Resharper를 사용하거나 수동으로 모든 파일의 이름을 변경 해야하는 경우 40ish를 얻었습니다 . 과 같은 여러 오류 "There is already a member Page_Load() defined"
가 발생하면 잘못된 클래스 이름과 중복 때문일 가능성이 큽니다.교체 CodeFile
모든 영문 페이지에 Codebehind
특히 난 당신의 하위 폴더의 파일에주의를 기울이십시오. Inhertis=""
상대 경로가 포함되어 있지 않은지 확인하십시오 . 네임 스페이스는 모든 것을 처리합니다. 따라서 올바른 형식은 Inherits="Namespace.classname"
. 클래스에 네임 스페이스 NaSpa와 파일 이름 foo.cs가있는 경우Inherits="NaSpa.foo"
모든 파일을 준비한 후 (마스터 페이지를 잊지 마세요) "웹 애플리케이션으로 변환"을 실행합니다. 나중에 오류가 발생하면 헹구고 반복하십시오. "TextBoxName을 찾을 수 없습니다. 참조가 누락되었습니다"라는 오류가 발생하면 aspx 페이지를 삭제하는 것을 잊지 마십시오. 좋은 지표는 자동으로 생성 된 디자이너 파일을 확인하는 것입니다. 가 TextBoxName
나타나지 않으면 변환이 완전히 성공하지 못한 것입니다.