2012-06-30 2 views
1

저는 현재 프로젝트의 마지막 단계에 있습니다. 필자는 노력의 일환으로 하나의 솔루션에 15 가지 프로젝트가있는 대신 사전 컴파일 된 라이브러리에 대한 참조를 사용하도록 MVC 솔루션을 재구성했습니다.Visual Studio에서 릴리스/디버그가 적용되는 레벨은 무엇입니까?

내 질문은 릴리스/디버그 스위치가 적용되는 위치와 관련이 있습니다.

예를 들어, 저수준 라이브러리가 디버그 모드로 만들어지고 메인 웹 클라이언트 앱이 출시 모드로 작성되었다고 말하십시오.

프로젝트가 릴리스 모드 (기본 응용 프로그램의 구성이므로) 또는 디버그 모드 (기본 응용 프로그램이 디버그 모드로 컴파일 된 바이너리에 종속되기 때문에)로 빌드됩니까?

+1

"프로젝트가 만들어 질 것인가?"주요 앱 또는 라이브러리 중 어떤 프로젝트를 의미합니까? Visual Studio의 디버그/릴리스 설정은 솔루션 단위가 아닌 프로젝트 단위입니다. –

+0

다양한 프로젝트를 찾아 내고 컴파일 된 라이브러리를 참조해야 할 필요가 있습니까? 이러한 다른 라이브러리에 대해 독자적으로 개발할 예정입니까, 아니면 주 응용 프로그램으로 만 변경합니까? 주요 응용 프로그램에만 사용됩니까? 호기심을 묻습니다. –

+0

@ Adam - 주 프로젝트. 본질적으로, 나는 "메인 애플리케이션이 릴리즈 모드로 구축되었는지, 다른 모든 것들이 그것을 존중할 것인가"라고 묻고있다. –

답변

2

설명하는 시나리오에서 웹 프로젝트는 "릴리스"어셈블리로 빌드되며 "디버그"어셈블리에 의존합니다. 따옴표의 이유는 "기본"옵션을 사용하지 않는 한 "릴리스"및 "디버그"어셈블리 간의 유일한 차이점은 디버그 심볼의 제외 또는 포함과 어셈블리의 IL 최적화에 있습니다. 그래서 디버그 어셈블리를 참조하는 릴리즈 어셈블리를 가지고있는 것이 타당한 상황입니다. 디버그 어셈블리에 더 많은 일리노이가 있기 때문에 (빌드 된 wirhout 최적화로 인해) JIT가 컴퓨터에서 실행될 코드를 최적화하려고 할 때 더 많은 작업을 수행 할 수있게되어 런타임시 최적화되지 않고 느린 환경이 될 수 있습니다.

참조 된 어셈블리에 디지털 서명 여부에 따라 빌드 후 작업을 사용하여 디버그 컴파일 된 참조 된 어셈블리를 프로젝트 출력을 위해 릴리즈 된 어셈블리로 대체 할 수 있습니다.

DLL을 파일로 참조하기위한 작동 방식으로 IDE를 만들 때 사용한 솔루션 외부에서 디버그 컴파일 된 어셈블리를 참조하면 안된다는 인수를 사용할 수 있습니다 (IDE에서 프로젝트 참조를 수행하는 것과 반대)) 어셈블리는 포함 된 기능의 테스트 완료 버전입니다.

요약하면 프로젝트를 컴파일하는 방법은 참조하는 어셈블리의 빌드 구성에 종속되지 않지만 가능한 경우 해당 어셈블리의 컴파일 된 버전을 참조해야합니다.

+0

길게 짧게 컴파일하면 "릴리스 모드"이지만 JIT는 디버그 의존성을 정리하기 위해 추가 작업을해야 할 것인가? –

+0

JIT는 디버그 어셈블리 자체에 시간이 더 많이 걸리며 디버그 라이브러리 호출은 더 오래 걸리고 릴리스 어셈블리에서 실행되는 코드는 디버그 어셈블리에서 실행되는 코드보다 빨라야합니다. 실행 코드) – mlorbetske