ASP.NET 웹 사이트를 ASP.NET 웹 응용 프로그램으로 변환하는 방법


90

ASP.NET 3.5 웹 사이트 (비주얼 스튜디오 용어)가 있지만 사이트는 계속 성장하고 있으며 다른 것들 중에서도 카우보이처럼 보입니다. 이것이 웹 애플리케이션 (네임 스페이스 및 모두)으로 변환되는 것을보고 싶습니다.

Visual Studio에서 쉽게 수행 할 수있는 작업입니까? 그렇지 않다면 모든 네임 스페이스 등을 자동으로 생성 할 수있는 다른 도구가 있습니까?


4
그 웹 사이트 템플릿은 웹 애플리케이션 템플릿에 비해 정말 끔찍한 POS입니다. 웹 사이트 템플릿 사용의 이점을 보지 못했습니다 ...
James

9
@ 제임스 - 나는 그것에서 멀리 이동 찾고 있어요 많은 이유 중 하나에 불과합니다 ... 당신은 .... 성가대에 전파된다
RSolberg

2
나는 아래 확인 연습이 (그것 모두를 읽지 않았다) 매우 철저,하지만 YouTube에서 사람이 여기에 웹 응용 프로그램에 웹 사이트를 변환하는 매우 간단한 방법을 보여 주었다 : youtube.com/watch?v=oXptokM0v7w -로 보통 나는 이것이 모든 사람에게 효과가있을 것이라고 보장 할 수 없습니다. 이 방법은 덜 복잡한 사이트를 가진 사람들에게 효과적이라고 생각합니다.
dyslexicanaboko

3
VS2013을 사용하는 경우 메뉴 항목이 이동 되었음을 잊지 마십시오 .
Jon

답변:


108

음, "웹 사이트"에 "웹 응용 프로그램으로 변환"옵션이 존재하지 않는 것으로 밝혀졌습니다. "웹 응용 프로그램으로 변환"옵션은 "웹 응용 프로그램"에만 존재합니다 !!!!

[내 강조]

따라서 여기에 거래가 있습니다. 변환을 수행하려면 다음을 수행해야합니다.

  • 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"에 코드를 넣지 마십시오.

이전부터 알고 있지만 "웹 사이트"모델을 오랫동안 사용하지 않았기 때문에 지금은 잊어 버렸습니다.


2
귀하의 링크가 상단에서 끊어졌습니다. 오류 500
Sameer Alibhai 2011

6
또한 "컴파일"이 아닌 "내용"으로 복사 할 코드 파일을 찾으십시오.
jcolebrand

14
VS2013에서이 작업을 수행하는 사용자를 위해 "Covert to Web App"이 하단의 프로젝트 메뉴로 이동되었습니다.
Eric Sassaman 2014

3
@EricSassaman 그러나 웹 사이트 프로젝트에는 전혀 없습니다.
NickG 2014-06-13

1
@NickG, 대답의 첫 번째 줄에 따르면 웹 사이트 프로젝트에는 존재하지 않으며 솔루션 탐색기에서 웹 응용 프로그램을 선택하지 않으면 프로젝트 메뉴도 존재하지 않습니다. 메뉴에 "웹 사이트"가 표시되면 웹 응용 프로그램이 아닙니다. 위의 단계에 따라 빈 웹 응용 프로그램을 만들고 여기에 파일을 복사하십시오. 그런 다음 새 웹 응용 프로그램의 프로젝트 메뉴에 "웹 응용 프로그램으로 변환"이 있어야합니다. 네가 했니?
Eric Sassaman 2014-06-20


5

새 웹 응용 프로그램 프로젝트를 빌드하는 데 문제가있는 경우 모든 '도우미'클래스의 Visual Studio에서 파일 속성을 확인하세요. 프로젝트의 경우 Build Action을 Content로 설정했지만 Compile이어야했습니다.


3

VS 2010에서 새 웹 응용 프로그램을 만듭니다.
1. Windows 탐색기를 사용하여 모든 파일을 프로젝트 폴더에 복사합니다.
2. VS 2010 솔루션 탐색기에서 모든 파일을 표시합니다.
3. 파일 및 폴더를 선택하고 프로젝트에 포함을 마우스 오른쪽 버튼으로 클릭합니다.
4. 프로젝트 솔루션 탐색기를 마우스 오른쪽 단추로 클릭하고 웹 응용 프로그램으로 변환을 선택합니다.

App_Code 폴더의 이름이 old_app_code로 변경되는 것과 같은 몇 가지 작은 차이점이 있습니다. 놀랍게도 오류가 발생하지 않습니다. 개체 데이터 소스의 TypeName과 @Page 태그의 상속에는 [ProjectName]이 필요할 수 있습니다. 접두사는 전역 적으로 추가됩니다. 예를 들어 유형 이름이 "BusinessLogic.OrderManager"이고 프로젝트 이름이 InventorySystem 인 경우이를 InventorySystem.BusinessLogic.OrderManager로 변경해야합니다. 또한 필수 필드 유효성 검사기와 같은 몇 가지 디스플레이 변경 사항은 더 이상 빨간색 글꼴로 기본 설정되지 않고 기본적으로 검은 색으로 설정됩니다.


내 앱 코드 파일이 예상대로 변경되지 않았습니다. 수동으로 이름을 바꾸고 컴파일 할 모든 cs 페이지를 변경해야했습니다.
Mike

3

처음에는 같은 문제에 직면했습니다. Wrox Professional ASP.NET 4.0 책을 읽은 후 다음과 같은 해결책을 찾았습니다.

먼저 새 웹 애플리케이션을 만들었습니다. 모든 웹 사이트 파일을 웹 응용 프로그램 폴더에 복사했습니다. 애플리케이션을 마우스 오른쪽 버튼으로 클릭하고 웹 애플리케이션으로 변환을 클릭합니다.

웹앱을 웹앱으로 변환해야하는 이유를 물어볼 수 있습니다. 대답은 웹 사이트를 만들 때 필요한 곳에 .cs 파일을 코딩하는 것입니다. 그러나 웹 애플리케이션은 코드 및 디자인 섹션에 대해 .design.cs (또는 .vb) 및 .cs 파일을 자동으로 선언합니다.

NEXT : PAGE 지시문의 'Inherits'속성과 같은 웹 사이트의 다른 파일에 대한 모든 수동 참조를 제거하십시오. 네임 스페이스는 클래스를 중앙에서 참조 할 것입니다.

프로젝트에 OBJ 및 BIN 폴더를 포함하지 않았기 때문에 문제에 직면했습니다. BIN 및 OBJ 폴더가 누락되었다고 생각되면 솔루션 탐색기에서 '모든 파일 표시'아이콘을 클릭 한 다음 누락 된 폴더를 마우스 오른쪽 단추로 클릭하고 프로젝트에 추가하십시오. (프로젝트와 함께 컴파일되도록합니다.)

업데이트 : @deadlychambers가 주석에서 지적했듯이 : "Ctrl + Shift + F"를 수행하여 모든 곳에서 검색 한 다음 Inherits="(.*?)". 이것은 모든 발생을 찾고 아마도 시간을 절약 할 것입니다!


1
Ctrl-shift-F로 모두 제거한 다음 정규식에 대한 검색 옵션을 변경하고이 Inherits = "(. *)?"를 사용할 수 있습니다.
DeadlyChambers 2014

1
Inherits = "(. *?)"인지 확인하십시오. 다른 하나는 마지막 따옴표까지 상속 된 모든 것을 가져옵니다.
DeadlyChambers 2014

1
상속이 없으면 디자이너가 네임 스페이스를 삭제 한 다음 클래스를 삭제하는 문제가 발생했습니다. 이게 더 쉬웠 으면 좋겠어요.
DeadlyChambers

3

이제 하나의 웹 사이트 프로젝트를 웹 응용 프로그램으로 성공적으로 마이그레이션했으며주의해야 할 몇 가지 문제가 있습니다.

ReSharper를 마음대로 사용하면 aspx 파일을 리팩토링하는 데 많은 도움이됩니다.

  1. 솔루션을 설정하고 빈 웹 애플리케이션을 만듭니다.
  2. 모든 파일 복사
  3. 웹 사이트 프로젝트의 .aspx 파일에는 namspace가 없습니다. 적절한 네임 스페이스에 클래스를 래핑합니다.
  4. 복사하는 동안 하위 폴더의 모든 페이지 이름이 프로젝트 이름과 폴더 이름으로 변경되었으므로 public partial class FolderName_Projectname : PageResharper를 사용하거나 수동으로 모든 파일의 이름을 변경 해야하는 경우 40ish를 얻었습니다 . 과 같은 여러 오류 "There is already a member Page_Load() defined"가 발생하면 잘못된 클래스 이름과 중복 때문일 가능성이 큽니다.
  5. 네임 스페이스를 추가 한 후
  6. 교체 CodeFile모든 영문 페이지에 Codebehind특히 난 당신의 하위 폴더의 파일에주의를 기울이십시오. Inhertis=""상대 경로가 포함되어 있지 않은지 확인하십시오 . 네임 스페이스는 모든 것을 처리합니다. 따라서 올바른 형식은 Inherits="Namespace.classname". 클래스에 네임 스페이스 NaSpa와 파일 이름 foo.cs가있는 경우Inherits="NaSpa.foo"

  7. 모든 파일을 준비한 후 (마스터 페이지를 잊지 마세요) "웹 애플리케이션으로 변환"을 실행합니다. 나중에 오류가 발생하면 헹구고 반복하십시오. "TextBoxName을 찾을 수 없습니다. 참조가 누락되었습니다"라는 오류가 발생하면 aspx 페이지를 삭제하는 것을 잊지 마십시오. 좋은 지표는 자동으로 생성 된 디자이너 파일을 확인하는 것입니다. 가 TextBoxName나타나지 않으면 변환이 완전히 성공하지 못한 것입니다.

  8. 누락 된 종속성을 해결하십시오.
  9. 짓다

0

기본 ASP 이름 공간이 더 이상 작동하지 않는 것 같습니다. 따라서 페이지 외부에서 User Controls.ascx 페이지를 호출 할 수 없습니다. 그들에게 네임 스페이스를 제공하고 기본값을 ASP에서 내 네임 스페이스로 변경하는 것이 작동하는 것처럼 보였습니다.

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