11

이 제품은 ASP.Net 웹 응용 프로그램입니다. 현재 Visual Studio에서 웹 사이트 프로젝트를 사용하고 있지만 상당 기간 웹 응용 프로그램 프로젝트를 사용하고 있습니다. 현재 배포 프로세스를 개선 할 수 있도록 조사 중입니다.웹 응용 프로그램 구조 및 배포

서로 다른 클라이언트간에 공유되는 기본 웹 사이트가 있습니다. 그런 다음 클라이언트 웹 사이트 프로젝트에서 클라이언트 관련 기능으로 확장합니다. 클라이언트 프로젝트는 기본을 확장하므로 내용에 의존합니다. 전체 제품을 빌드하려면 먼저 기본 웹 사이트를 배포 한 다음 클라이언트 프로젝트의 컨텐츠로 오버레이합니다.

Visual Studio에서 웹 응용 프로그램 프로젝트로 변환하는 과정에서 기본 프로젝트를 만든 다음 클라이언트 프로젝트를 만들고 기본 참조를 설정할 수 있기를 기대했습니다. 이 구조는 정상적으로 작동하지만 MSDeploy를 사용하여 클라이언트 프로젝트에서 응용 프로그램을 배포하려고하면 기본 웹 사이트의 dll 만 게시됩니다. 컴파일 된 코드를 참조하는 것이 유용하지만 이미지, js 페이지, htm 등과 같이 클라이언트 응용 프로그램이 작동하는 데 필요한 소스가 여전히 있습니다. 기본 웹 사이트의 컴파일 된 코드 이상이 필요합니다.

모든 말했다되는 것을 여기 몇 가지 옵션을 생각할 수 있습니다

  1. 2 단계 배포를 계속합니다. 먼저 기본 웹 사이트를 만든 다음 클라이언트 웹 사이트에서 전체 제품을 만듭니다.
  2. 기본 프로젝트에서 필요한 소스 파일을 복사하도록 배포 프로세스를 수정하십시오.
  3. 이 기본 클라이언트 관계를 다른 방식으로 지원하도록 모델을 다시 설계하십시오. 이것이 어떻게 작동할지는 확실치 않으며, 실행 가능한 옵션이 가장 적을 것입니다.
  4. ??

다른 옵션이 있습니까? 프로젝트를 설정하는 방식에 문제가 있습니까? 웹 응용 프로그램이 컴파일 된 코드 공유 이외의 다른 웹 응용 프로그램을 참조하도록 만드는 데 더 많은 것이 있습니까? 그렇다면 공유 클래스 라이브러리를 사용하지 않는 이유는 무엇입니까? 아니면 MS 배포 프로세스에서 뭔가가 누락 되었습니까?

나는 뭔가를 놓치고있는 것처럼 느껴진다. 나는 웹 애플리케이션을위한 우리 모델이 너무 독특하다고 생각하지 않는다.

업데이트 : 이중 배포 프로세스는 작동하지만 약간의 복잡함을 느낍니다. 다른 입력?

+6

예, 모델이 비정상적입니다. 그러나 어떤 경우에도 웹 사이트 "프로젝트"에서 도망 간다. 그들은 독특하고 좋은 방법이 아닙니다. –

+0

예. 우리는 잠시 웹 사이트 프로젝트가 .. 음, 여러 가지 방법으로 "특별"하다는 것을 알고 있습니다. 그것의 다만 단단한 무언가를 고치는 시간에 단단한. 우리의 구조가 너무 독특해서? 또 다른 옵션은 모든 프로젝트에 애플리케이션의 전체 소스를 포함시키고 일종의 소스 브랜칭을 설정하는 것입니다. 우리는 이전에 그렇게 했으므로 변화를 유지하기가 매우 어려워졌습니다. – yourbuddypal

+1

이전에이 시나리오에서는 분기를 사용하지 않았지만 FYI에서는 TFS 2010의 분기가 과거보다 훨씬 사용하기 쉽습니다. 보세요. 또한 응용 프로그램의 클라이언트 관련 부분을 공통 부분과 조심스럽게 분리하여 격리하는 것이 좋습니다. 앱 내에서 특정 확장 성과 커스터마이징 포인트를 생성하십시오. 그러면이를 가장 효과적으로 배포하는 방법을 더 쉽게 알 수 있습니다. MSDEPLOY로 즐길 수있는 재미있는 트릭이 있습니다. http : //www.amazon을 참조하십시오.com/Inside-Microsoft-Build-Engine-Foundation/dp/0735645248 –

답변

0

사이트가 클라이언트간에 "공유"되는 방식은 무엇입니까? 각 클라이언트는 궁극적으로 다른 사이트 (IP 주소 등)를 얻거나 동일한 사이트에 로그인하지만 다른 기능을 사용합니까? 단일 프로젝트에 모든 기능을 추가 한 다음 설정을 통해 기능을 활성화/비활성화 할 수 있습니다.

0

질문을 올바르게 이해했다면 컴파일되지 않은 항목 (htm, JS, 이미지 등)을 게시하고 싶습니다.

그래서 솔루션 탐색기 탭의 각 파일에는 빌드 동작을 선택할 수있는 고유 한 속성이 있습니다 (예 : 컴파일 -> 해당 항목이 DLL에 삽입 될 것임, content -> will 파일을 "있는 그대로"출력 디렉토리에 복사하십시오.)

"copy to output directory"옵션이 "copy if newer"로 설정된 빌드 동작이 "컨텐츠"라고 생각하면 찾고있는 해결책이 될 수 있습니다.

0

프로젝트간에 공유하는 내용과 공유 방법을 신중하게 분석합니다.

컴파일 된 코드 인 경우 올바른 방법은 해당 클래스를 자체 네임 스페이스 및 어셈블리로 추출하고 프로젝트간에 DLL을 공유하는 것입니다. 리팩토링하는 동안 OO 및 SOLID 원칙을 따르도록하십시오.

공유하는 콘텐츠 (js, htm, images, css) 인 경우 몇 가지 옵션이 있습니다. 콘텐츠에 대해 별도의 가상 디렉터리를 만들고 절대 URL로 콘텐츠를 참조 할 수 있습니다. 이 기능은 IIS에서 프로젝트를 자체 웹 사이트로 분리하려는 경우 나중에 해당 URL을 변경할 필요가 없기 때문에 콘텐츠 URL을 변경할 필요가 없기 때문에 도움이됩니다. 소위 기본 웹 사이트의 모든 컨텐츠를 가지고 기본 웹 사이트에 상대적인 상대 경로를 사용하여 다른 프로젝트의 컨텐츠를 참조 할 수도 있습니다.

반면에 공유하려는 ASP.NET 사용자 컨트롤 또는 ASP.NET MVC보기 인 경우 각 프로젝트에서 개별 항목을 만드는 것이 가장 좋습니다. 그렇다고해서 그 경로에 별도의 실제 파일이 있다는 것을 의미하지는 않습니다. Visual Studio의 .NET 프로젝트에서 참조 링크 인 항목을 추가 할 수도 있습니다.

배포 프로세스에 관해서는 웹 사이트 프로젝트 자체에 문제가 있다고 생각하지 않습니다. 웹 사이트 프로젝트는 웹 응용 프로그램 프로젝트와 다른 목적을 가지고 있습니다. 코드를 배포 할 때마다 (올바른 응용 프로그램 폴더에있는 경우) 클래스를 컴파일 할 필요가 없습니다. 웹 사이트 프로젝트에서 2 단계 배포 프로세스를 따르는 것이 좋습니다.

또한 IIS에서 만든 웹 사이트 (가상 디렉터리)를 검토하여 의미가 있다고 생각하면 중첩하는 것이 좋습니다. 또한 응용 프로그램 풀 (별도 또는 공유 여부에 관계없이)을 검토해도 문제가 발생하지 않습니다.

마지막으로, 이것은 오래된 질문입니다. 성공적인 전략을 이미 구현했다면 공유하십시오.

1

어셈블리 WebResource를 사용하면 CSS/JS/다른 파일을 참조와 함께 코드, 즉 기본 프로젝트 DLL과 함께 추가 할 수 있습니다.

이 웹 리소스를 기본 프로젝트에 추가 한 다음 아래 링크를 클릭하십시오.

http://support.microsoft.com/kb/910442

이 방법처럼, 타사 도구의 대부분은 자신의 CSS와 JS 파일에 액세스합니다.

시도해보십시오. 희망이 도움이 될 것입니다.