문제

ASPX 페이지에서 사전 처리기 지침을 사용하려고하지만 페이지는 인식하지 못합니다. 이것은 내가 할 수없는 일입니까?

배경 : 디버그 모드에 jQuery의 정식 버전 (Well, Debugging =))과 릴리스를위한 미니딩 버전을 포함 시키려고합니다. 나는 이것을 시도했지만 ASPX <% 구문에 대해서는 굉장히 익숙하지 않습니다. 이 구문이하는 일을 근본적으로 오해하고 있습니까?

<% #if DEBUG %>
<script type="text/javascript" src="resources/jquery-1.3.2.js" />
<% #else %>
<script type="text/javascript" src="resources/jquery-1.3.2.min.js" />
<% #endif %>
도움이 되었습니까?

해결책

흥미로운 차이 - ASPX 페이지에서 #if 디버그를 사용하면 web.config의 태그에서 가져 오지만 코드 - 비만에서 사용하면 프로젝트 파일의 빌드 구성에서 상수에서 디버그를 가져옵니다. 그래서 그들은 실제로 두 가지에 액세스하고 있습니다 다른 설정.

따라서 내가 알 수있는 한, 이것은 실제로 불가능합니다.

다른 팁

더 나은 접근 방식은 스크립트를 포함시키기 위해 서버 사이드 코드를 사용하는 것일 수 있습니다. 나는 같은 것을 사용할 것입니다

protected void Page_Load(object sender, EventArgs e)
{
#if DEBUG    
    ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "JQueryScript", "resources/jquery-1.3.2.js");
    #else
    ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "JQueryScript", "resources/jquery-1.3.2.min.js");
    #endif
}

나에게 가장 우아한 솔루션은 사전 처리기 지시문을 사용하여 코드-비인의 필드를 간단히 정의한 다음 ASPX 페이지에서 그 가치를 확인하는 것입니다.

Code-Behind에서 :

public partial class WebClient : System.Web.UI.Page
{        
#if DEBUG 
    public bool DebugMode = true;
#else
    public bool DebugMode = false;
#endif
}

ASPX 페이지 :

<%if(this.DebugMode){%>
    <script type="text/javascript" src="resources/jquery-1.3.2.js" />
<%}%>
<%else{%>
    <script type="text/javascript" src="resources/jquery-1.3.2.min.js" />
<%}%>

나는 당신의 코드를 시도했고 그것은 나에게 잘 작동했습니다. Web.config의 System.Web/Compilation Section에서 웹 사이트로 실행되는 디버그를 활성화 또는 비활성화했습니다 (웹 응용 프로그램으로 테스트하지 않았으며 다를 수 있습니다 ...).

해당 코드가 수행하는 작업을 보려면 페이지에 의도적 인 구문 오류를 넣고 디버그 모드를 활성화하여 실행하십시오. 컴파일러는 오류 페이지에서 링크를 생성하여 소스를 볼 수 있습니다.

힌트 : 사전 프로세서 지시문 ~이다 출력에 삽입되었습니다.

Line 218:     #if DEBUG 
Line 219:              
Line 220:              #line default
Line 221:              #line hidden
Line 222:              @__w.Write("\r\n<script type=\"text/javascript\" src=\"resources/jquery-1.3.2.js\" />\r\n");
Line 223:              
Line 224:              #line 14 "F:\Test\test.aspx"
Line 225:     #else 
Line 226:              
Line 227:              #line default
Line 228:              #line hidden
Line 229:              @__w.Write("\r\n<script type=\"text/javascript\" src=\"resources/jquery-1.3.2.min.js\" />\r\n");
Line 230:              
Line 231:              #line 16 "F:\Test\test.aspx"
Line 232:     #endif

물론, 당신이 따라가는 일을하는 다른 (더 나은) 방법이 있습니다 ...

나는 성공을 거두면서 수년에 걸쳐 여러 가지 방법을 달성하려고 노력했습니다. ASP.NET MVC를 사용한 후 최근 에이 아이디어를 얻었습니다. 유효하지 않은 MIME 유형을 사용하여 ASPX 페이지에 모든 것을 보관할 수있는 또 다른 가능성이 있습니다. ASP.NET MVC에서는 템플릿에 유효하지 않은 MIME 유형이로드되어 브라우저에 구문 분석되지 않습니다. 나는 여기서 같은 패턴을 따랐다. wola! 성공 ... 디버그 제약 조건에 쉽게 액세스 할 수있는 하나의 정적 기능이 필요합니다.

<script src='<%= Page.ResolveUrl("~/Scripts/jquery-1.5.2.min.js") %>' 
    **type='<%=if(Ops.IsRelease(),"text/javascript","HideMin")%>'**></script> 

ops.isrelease ()는 디버그 상 분자를 반환하는 공개 정적 함수입니다.

    Public Shared Function IsRelease() As Boolean
        Dim [release] = False
#If Not debug Then
        [release]=True
#End If
        Return [release]
    End Function

같은 문제가 있었는데 ASP.MVC 애플리케이션과 웹 폼 애플리케이션에서 해결하려고했습니다. #IF 디버그는 항상 true를 반환합니다. Web.config 컴파일 설정을 고려하지 않습니다. 이 게시물에 게시 된 Syam Advice와 비슷한 방식으로 해결했지만 정적 기능 대신 여기에 설명 된대로 Astatcic 변수를 사용합니다.http://www.psworld.pl/programming/debugdirection

내 해결책은 다음과 같습니다.

protected void Page_Load(object sender, EventArgs e)
{
    if (System.Diagnostics.Debugger.IsAttached)
    {
        ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "JQueryScript", "resources/jquery-1.3.2.js");
    }
    else
    {
        ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "JQueryScript", "resources/jquery-1.3.2.min.js");
    }
}

불행히도 ASPX에서 사전 처리기 지시를 가질 수 있다고 생각하지 않습니다.

더 간단한 방법은 jQuery URL에 피드를 제공하는 코드-비만에 단순히 속성을 두는 것입니다. 그러면 전처리 서기 지시문을 설정하여 선언 할 수 있습니다. 또는 Code-Infront에 URL을 유지하려면 문자 그대로의 제어를 사용하고 프로세서 지시문을 기반으로 코드 베어드에서 가시성을 전환 할 수 있습니다.

예를 들어:

코드-인기 :

<asp:literal id="litJQuery" EnableViewState="false" runat="Server">
<script type="text/javascript" src="resources/jquery-1.3.2.js" />
</asp:literal>
<asp:literal id="litJQueryDebug" EnableViewState="false" Visible="false" runat="Server">
<script type="text/javascript" src="resources/jquery-1.3.2.min.js" />
</asp:literal>

page_load 메소드에서 Code-behind :

#if DEBUG
litJQueryDebug.Visible=true;
litJQuery.Visible=false;
#endif
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top