#debug preprocessor 명세서 ASPX 페이지
-
05-07-2019 - |
문제
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