2009-05-21 2 views
8

사람들이 조건부 마크 업을 처리하는 방법, 특히 릴리스와 디버그 빌드 사이의 마스터 페이지를 처리하는 방법에 대해 알고 싶습니다.JS/CSS 섹션 대체 포함, 디버그 vs 릴리스

이 경우 적용 할 수있는 특정 시나리오는 연결된 js 및 css 파일 처리입니다. 저는 현재 YUI 압축의 .Net 포트를 사용하여 별도의 파일 모음에서 site.css와 site.js를 하나 생성합니다.

사용자 컨트롤이나 패널 모음에 js 및 css include 섹션을 배치하고 어셈블리의 디버그 또는 릴리스 상태에 따라 및 <script> 마크 업을 조건부로 표시하는 것이 한 가지 생각이었습니다. 의 라인을 따라 뭔가 :

#if DEBUG 
    pnlDebugIncludes.visible = true 
#else 
    pnlReleaseIncludes.visible = true  
#endif 

패널은 정말 의미 아주 좋은되지는 - <div><script> 태그를 포장 조금 심한입니다; 더 나은 접근 방법이 있어야합니다. 나는 또한 블록 레벨 요소가 <div><head> 내에서 유효하지 않다고 생각한다.

또 다른 생각은 web.config 섹션 대체를 사용하여 처리 할 수 ​​있지만 웹을 어떻게 처리 할 것인지 잘 모르겠습니다.

+0

. 유이 압축의 .Net 포트 - 고마워, 내 자신의 js 파일을 연결하는 이런 식으로 찾고 있었어요. –

+0

OMG - YUI의 .NET 포트를 사용했던 그 사람을 알고 있습니다. 작은 세계, 등등. –

답변

5

여기 Web.config의 설정 변경에 상당한 논의가있다 Using different Web.config in development and production environment

참고 : 다른 질문을하고 있지만 라이브 및 디버그 설정을 전환하는 방법에 대한 제안이 많기 때문에 어쨌든 살펴 보시기 바랍니다. 모든 답변 (IMO)에는 가치가 없습니다. 가장 높은 투표/수락 된 답변.

개인적으로, 나는 방법은 여기에서 설명하고 가장 유연한 생각하고이 파일을 기반으로 구성 변경의 모든 유형에 적용 할 수 있지만이 솔루션 구성에 따라 자동으로 교환 할 수 있습니다 사용

http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx

기본적으로 웹 구성을 디스크의 다른 구성으로 바꾸려면 미리 빌드 이벤트를 실행하고 솔루션 구성 이름은 파일 이름에 추가하십시오. 예를 들어, web.config.release, web.config.debug 및 심지어 web.config.neilathome이 있습니다.

다음 부분 클래스를 만들고 자신의 파일에서 내 솔루션 구성간에 변경 내용을 넣어 코드의 조건부 비트에 대해 동일한 동일한 방법을 사용합니다. 예를 들어, sync_timersettings.cs는 업데이트 코드가 웹 서비스를 호출하는 빈도를 정의하는 몇 가지 상수를 포함하는 부분 클래스입니다. 아니면 모든 설정을 app.settings 파일에 넣고 그렇게 할 수 있습니다.

나는 매우 유연한 해결책을 찾았는데, 자바 스크립트와 CSS의 덩어리를 바꿀 수있게 해줬고, 구성간에 변경되는 사항을 자신의 파일에 넣을 시간이 있다면, 디버그 솔루션 구성에서 디버깅을 수행 한 다음 한 번의 클릭으로 릴리스 및 배포로 전환 할 수 있습니다.

하나 더 참고 : 의견에

#if DEBUG 
    pnlDebugIncludes.visible = true 
#else 
    pnlReleaseIncludes.visible = true  
#endif 

응답 : 당신은 디버그 솔루션 구성 및 라이브 배포 하나 다른 일이있는 경우

에만 유용합니다. 디버깅이 가능할 때만 DEBUG 기호가 설정되므로 사용자 (나 같은)가 스테이징, 릴리스 및 neilonhislaptop 솔루션 구성을 가지고있을 때 작동하지 않습니다. 해결 방법은 웹 응용 프로그램의 속성 페이지로 이동하여 빌드 탭에서 각 빌드 구성에 대한 조건부 기호를 입력하는 것입니다. IE에서, 당신은 릴리스 탭에 조건부 심볼 박스에 'release'를 놓기위한 설정을해야한다. 그런 다음 다른 빌드 구성에 대해 동일한 작업을 수행하면 빌드 구성에 따라 자동으로 조건부 기호 상자가 변경됩니다. #if 조건 컴파일 지시문이 예상대로 작동합니다.

Bayard는 구성간에 마크 업을 변경하는 방법에 대한 자세한 정보를 요청했습니다. 음 은 전체 .aspx 페이지를 스왑하는 데 사용할 수 있습니다. home.aspx.release 및 home.aspx.debug가 있지만 각 파일에서 많은 마크 업을 반복해야한다는 것을 의미합니다. 내 솔루션은 내 응용 프로그램에 부분 클래스를 추가하는 것입니다. 예를 들어, 내 'ViewImage'페이지가있는 다음 클래스 정의가 : 나도 같은 서명을 몇 가지 클래스 파일을 생성하고 'ViewImage_titleset.cs.debug'와 'ViewImage_titleset.cs 그 이름 ..so

public partial class ViewImage : System.Web.UI.Page 

'.staging :

namespace Website 
{ 
    public partial class ViewImage : System.Web.UI.Page 
    { 
     public void SetTitle() 
     { 
      Page.Title = "Running in debug mode"; 
     } 
    } 
} 

및 ViewImage의 페이지로드 이벤트에서 setTitle이라는를 ..calling

namespace Website 
{ 
    public partial class ViewImage : System.Web.UI.Page 
    { 
     public void SetTitle() 
     { 
      Page.Title = "Running in staging mode"; 
     } 
    } 
} 

하는 구성이 위치에 구축에 따라 제목을 변경합니다. 프로그래밍 방식으로 페이지를 변경하는 경우에만 작동합니다.

이와 같은 코드를 변경하려면 위의 조건부 컴파일 방법을 사용하고 이미지 또는 web.configs와 같은 코드가 아닌 파일을 변경하는 파일 스왑 방법을 예약하는 것이 좋습니다. 게시 할 때 배포 할 대체 파일을 설정하지 않았는지 확인하십시오.

+1

개발, 테스트 및 생산 솔루션 구성도 사용합니다. # 만약 개발 pnlDevelopmentIncludes.visible = 사실 # 만약 테스트 #endif 다음 pnlTestIncludes.visible = 사실 # :만큼 각 구성에 대한 조건부 컴파일 기호를 정의, 당신은 같은 것을 할 수 있어야한다 endif –

+0

Neil은 분명히 올바른 접근 방식 인 것처럼 보입니다.부분 클래스를 사용하여 다른 빌드 간의 마크 업을 변경하는 방법을 확장 해 주시겠습니까? –

+0

명명 규칙을 web.debub.config 또는 web.release.config와 비슷한 이름으로 변경할 수 있습니다. 기본적으로 IIS는 .config로 끝나는 파일을 제공하지 않으므로 더 좋을 수도 있습니다. –

9

방금 ​​ASP.NET MVC 프로젝트의 마스터 페이지에서이 작업을 시도했지만 제대로 작동했습니다. DEBUG 모드에서 나는 jQuery를의 개발 버전을 사용하여 디버그 모드에서, 내가 jQuery를의 축소 된 버전을 사용하지 않을 경우 경우 :

:

<head runat="server"> 
<% #if DEBUG %> 
    <script type="text/javascript" src="<%= Url.Content("~/Scripts/jquery.js") %>"></script> 
<% #else %> 
    <script type="text/javascript" src="<%= Url.Content("~/Scripts/jquery.min.js") %>"></script> 
<% #endif %> 
</head> 
+0

(효과가없는 부분이 회색으로 표시된 코드와 같이) 편집기에서는 제대로 작동하지 않는 것처럼 보이지만 작동합니다. – Will

+1

DEBUG 심볼은 web.config의 Sprintstar

1

JS 파일과 관련하여 웹 응용 프로그램을 미리 컴파일하려면 Web Deployment Projects을 사용하십시오. 구성이 릴리스이면 빌드가 완료된 후 JS 파일을 축소하고 출력 디렉토리의 파일을 바꿉니다. 이 작업은 모두 MSBuild으로 끝납니다. beacuse 웹 배포 프로젝트는 MSBuild 파일입니다.

관련 문제