البيانات #DEBUG قبل المعالج في صفحة ASPX
-
05-07-2019 - |
سؤال
وأنا أحاول أن استخدام التوجيه المعالج في صفحة ASPX، ولكن الصفحة لا يتعرف عليه. هل هذا مجرد شيء لا أستطيع أن أفعل؟
والخلفية: أنا أحاول أن تشمل النسخة الكاملة من مسج في وضع DEBUG (ل، حسنا، التصحيح =))، والنسخة مصغر للإفراج عنه. حاولت ذلك، لكنني لست على دراية بشكل رهيب مع 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 %>
المحلول
والفرق للاهتمام هنا - باستخدام #if DEBUG في صفحة aspx تسحب من العلامة في الملف web.config، ولكن عند استخدامه في التعليمات البرمجية الخلفية، فإنه يسحب DEBUG من الثابت من تكوين بناء في ملف المشروع . حتى انهم الوصول إلى اثنين على مختلفة إعدادات الواقع.
وهكذا، بقدر ما استطيع ان اقول، وهذا غير ممكن في الواقع.
نصائح أخرى
قد يكون طريقة أفضل لاستخدام رمز جانب الملقم لتشمل النصي. فما استقاموا لكم فاستقيموا استخدام شيء من هذا القبيل
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.
في التعليمات البرمجية الخلفية:
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" />
<%}%>
وحاولت التعليمات البرمجية، وأنه يعمل بشكل جيد بالنسبة لي. I تمكين أو تعطيل DEBUG من قسم system.web / تجميع في الملف web.config، تشغيل وموقع على شبكة الإنترنت (لم يختبر كتطبيق ويب، قد تكون مختلفة ...).
لنرى ما يفعله هذا الرمز، ووضع خطأ في بناء الجملة المتعمد في الصفحة، ومحاولة لتشغيله مع وضع التصحيح تمكين. فإن المترجم توليد وصلة على صفحة الخطأ التي تسمح لك لعرض المصدر.
وتلميح: توجيهات ما قبل المعالج <م> وم> إدراجها في الانتاج
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 مؤخرا حصلت على هذه الفكرة. وهناك احتمال آخر للحفاظ على كل شيء في صفحة aspx باستخدام أنواع MIME غير صالحة. في 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 () هو وظيفة ثابتة العامة التي ترجع constaraint التصحيح
Public Shared Function IsRelease() As Boolean
Dim [release] = False
#If Not debug Then
[release]=True
#End If
Return [release]
End Function
وكان لي نفس المشكلة، حاولت ايجاد حل لها في كل من asp.mvc تطبيق ويبفورم التطبيق. التصحيح #if عودة صحيحا دائما، فإنه يأخذ أبدا في الحسبان وضع تجميع الملف web.config. I حلها بطريقة مماثلة لصيام المشورة شارك في هذا المنصب، ولكن بدلا من وظيفة ثابتة يمكنني استخدام متغير astatcic كما هو موضح هنا: http://www.psworld.pl/Programming/DebugDirective
وهنا هو بلدي الحل:
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 للأسف.
وهناك طريقة أبسط ليذهب هو أن يكون مجرد الممتلكات الخاصة بك في التعليمات البرمجية الخلفية التي تغذي في URL مسج، ثم يمكنك وضع توجيهات المعالج لنعلن ذلك. أو إذا كنت تفضل للحفاظ على 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:
#if DEBUG
litJQueryDebug.Visible=true;
litJQuery.Visible=false;
#endif