2012-10-02 10 views
14

내 프로젝트 구조는 다음과 같습니다는 MVC4 프로젝트를 실행할 수 없습니다

  • SRC
    - 클래스 라이브러리 1
    - 클래스 라이브러리 2
    - 웹 프로젝트

  • - 디버그
    - 해제

MVC4 웹 프로젝트의 기본 출력 디렉토리는 .\Bin\입니다. 웹 프로젝트 디렉토리 내에서),하지만 위 프로젝트 구조에 맞게 ..\bin\debug\ 또는 ..\bin\release\과 같이 변경합니다. 그것은 잘 컴파일하고 바이너리는 올바른 장소로 이동합니다.

그러나 프로젝트를 실행하면 Could not load type Myproject.MvcApplication이라는 문구가 표시되지만 위의 변경 사항을 적용하지 않으면 작동합니다.

어떻게 바이너리의 위치를 ​​제어합니까? 나는 소스 디렉토리와 완전히 다른 출력 디렉토리를 원한다. 소스와 바이너리가 혼재되어 있지 않기 때문에 배포가 쉽고 안전하다.

답변

10

짧은 답을 할 수 없습니다. Visual Studio 또는 .NET과는 아무 관련이 없습니다. IIS 제한입니다.

이유는 IIS가 bin 디렉터리가 웹 사이트 폴더 위치 바로 아래에 있어야하기 때문입니다. 이것은 우회 할 수없는 보안 메커니즘입니다. 목적은 손상된 웹 사이트가 사이트 루트의 경계에서 "벗어나지 못하도록"방지하는 것입니다.

왜이 작업을 수행하고 싶습니까?

+0

나는 msbuild를 사용하기 때문에 내 msbuild의 출력 bin 디렉토리에서 모든 것을 배포합니다. 그리고 소스를 바이너리와 분리하기를 원하기 때문에 우연히 파일을 가져서는 안되는 사람에게 파일을 넘겨주지 않습니다. –

+0

문제로 보지 않습니다. 어쩌면 내가해야 할 일은 편의상 실행/디버그 버튼을 클릭하면 프로젝트의 bin 디렉토리가 아니라 내 msbuild의 bin 디렉토리에서 웹 사이트를 실행하는 방법을 파악하는 것입니다. IIS Express가 그렇게 할 수 있습니까? –

+0

@BobbyB - Bin 디렉토리에서 웹 사이트를 실행할 수 없습니다.보기 파일, 자바 스크립트, 이미지 등의 파일에 대한 액세스가 필요합니다. 모두 루트 디렉토리 아래에 있어야합니다. 따라서 bin 디렉토리를 만들면 루트 디렉토리에 있다면, bin 디렉토리에서 전체 웹 사이트 구조를 복사해야합니다. 너는 정말로 말이 안되는구나. –

2

디버깅과 릴리스 바이너리의 분리가 표준 방식이며 MVC에 출력 폴더 설정이있어 유혹을 받는다는 점을 생각해 보면 예상치 못한 혼란을 겪을 수 있습니다. 이 작업을 수행 할 수 있습니다 (here 참조).하지만 약간 추합니다.

IIS의 기대치를 준수하고 디버그 및 릴리스를 별도로 유지하고 명확하게 레이블을 붙일 필요가있을 때마다 충돌이있는 것으로 보입니다. 나는 현재의 해결책이 매우 만족스럽지 못하다는 두 가지 필요성이 있다고 생각한다. 디버그 및 릴리스는 빌드 타임을 고려하여 IIS를 준수하는 것이 패키지/배포 시간이며이 둘은 혼란스러워졌습니다.

관련 문제