C# #C语言中的if预处理器#
我是C#/Asp.net世界的新手,最近我遇到了#if调试预处理器,但即使看了Stack Over flow和MSDN网站以及其他博客上的帖子,我也无法让它工作 我正在制作一个小网站。 我通过向解决方案添加一个新项目来实现一个数据层。 在数据层中,我检查传递给存储过程的参数 因此,目的是打印应用程序在调试模式下运行时传递的参数,而当应用程序在发布模式下运行时,不应显示参数 任何帮助都将不胜感激 谢谢C# #C语言中的if预处理器#,c#,asp.net,C#,Asp.net,我是C#/Asp.net世界的新手,最近我遇到了#if调试预处理器,但即使看了Stack Over flow和MSDN网站以及其他博客上的帖子,我也无法让它工作 我正在制作一个小网站。 我通过向解决方案添加一个新项目来实现一个数据层。 在数据层中,我检查传递给存储过程的参数 因此,目的是打印应用程序在调试模式下运行时传递的参数,而当应用程序在发布模式下运行时,不应显示参数 任何帮助都将不胜感激 谢谢 #define DEBUG using System; using System.Data;
#define DEBUG
using System;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TestWebsite.DataLayer.BussinessObjects;
using Microsoft.Practices.EnterpriseLibrary.Data;
using Microsoft.Practices.EnterpriseLibrary.Data.Sql;
using System.Data.Common;
namespace TestWebsite.DataLayer
{
public class StatesManager
{
public ICollection<States> getAll(States statesObj)
{
List<object> parameters = new List<object>();
List<States> scol = new List<States>();
try
{
parameters.Add(statesObj.State);
parameters.Add(statesObj.Abbreviation);
parameters.Add(statesObj.StartRowIndex);
parameters.Add(statesObj.MaximumRowsCount);
parameters.Add(statesObj.SortExpression);
parameters.Add(statesObj.SortDirection);
#if DEBUG
System.Web.HttpContext.Current.Response.Write("State =" + statesObj.State + ",<br/>");
System.Web.HttpContext.Current.Response.Write("Abbreviation =" + statesObj.Abbreviation + ",<br/>");
System.Web.HttpContext.Current.Response.Write("StartRowIndex =" + statesObj.StartRowIndex.ToString() + ",<br/>");
System.Web.HttpContext.Current.Response.Write("MaximumRowsCount =" + statesObj.MaximumRowsCount.ToString() + ",<br/>");
System.Web.HttpContext.Current.Response.Write("SortExpression =" + statesObj.SortExpression + ",<br/>");
System.Web.HttpContext.Current.Response.Write("SortDirection =" + statesObj.SortDirection.ToString() + "<br/>");
#endif
object[] paramArray = parameters.ToArray();
SqlDatabase db = new SqlDatabase(ConnectionManager.ConnectionString);
DbCommand dbCommand = db.GetStoredProcCommand("GetAllStates", paramArray);
IDataReader reader = db.ExecuteReader(dbCommand);
while (reader.Read())
{
States sreader = new States();
sreader.State = (string)reader[reader.GetOrdinal("State")];
sreader.Abbreviation = (string)reader[reader.GetOrdinal("Abbreviation")];
sreader.IsActive = (bool)reader[reader.GetOrdinal("IsActive")];
sreader.RowNumber = (long)reader[reader.GetOrdinal("RowNo")];
sreader.StateID = (int)reader[reader.GetOrdinal("StateID")];
scol.Add(sreader);
sreader = null;
}
reader.Dispose();
}
catch (Exception ex)
{
throw ex;
}
finally { parameters = null; }
return scol;
}
}
}
#定义调试
使用制度;
使用系统数据;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用TestWebsite.DataLayer.bussinesobjects;
使用Microsoft.Practices.EnterpriseLibrary.Data;
使用Microsoft.Practices.EnterpriseLibrary.Data.Sql;
使用System.Data.Common;
命名空间TestWebsite.DataLayer
{
公共阶级政治家
{
公共ICollection getAll(州)
{
列表参数=新列表();
List scol=新列表();
尝试
{
parameters.Add(statesObj.State);
参数.Add(statesObj.缩写);
parameters.Add(statesObj.StartRowIndex);
parameters.Add(statesObj.MaximumRowsCount);
parameters.Add(statesObj.SortExpression);
parameters.Add(statesObj.SortDirection);
#如果调试
System.Web.HttpContext.Current.Response.Write(“State=“+statesObj.State+”,
);
System.Web.HttpContext.Current.Response.Write(“缩写=“+statesObj.缩写+”,
);
System.Web.HttpContext.Current.Response.Write(“StartRowIndex=“+statesObj.StartRowIndex.ToString()+”,
);
System.Web.HttpContext.Current.Response.Write(“MaximumRowsCount=“+statesObj.MaximumRowsCount.ToString()+”,
);
System.Web.HttpContext.Current.Response.Write(“SortExpression=“+statesObj.SortExpression+”,
);
System.Web.HttpContext.Current.Response.Write(“SortDirection=“+statesObj.SortDirection.ToString()+”
);
#恩迪夫
object[]paramArray=parameters.ToArray();
SqlDatabase db=newsqldatabase(ConnectionManager.ConnectionString);
DbCommand DbCommand=db.GetStoredProcCommand(“GetAllState”,paramArray);
IDataReader reader=db.ExecuteReader(dbCommand);
while(reader.Read())
{
States sreader=新状态();
sreader.State=(字符串)reader[reader.GetOrdinal(“State”);
sreader.缩写=(字符串)reader[reader.GetOrdinal(“缩写”);
sreader.IsActive=(bool)reader[reader.GetOrdinal(“IsActive”);
sreader.RowNumber=(长)读卡器[reader.GetOrdinal(“RowNo”);
sreader.StateID=(int)reader[reader.GetOrdinal(“StateID”);
补充条款(sreader);
sreader=null;
}
reader.Dispose();
}
捕获(例外情况除外)
{
掷骰子;
}
最后{parameters=null;}
返回scol;
}
}
}
在解决方案资源管理器中右键单击项目,然后单击属性。
转到Build选项卡并从下拉列表中选择调试配置。
确保选中“定义调试常量”
对发布配置执行相同的操作,但确保未选中“definedebug常量”
这将确保所有
#if DEBUG
指令按照您的期望工作
编辑:
由于您使用的是网站项目,请进入system.web部分下的web.config文件,找到或添加节点。此属性将打开和关闭调试常量。在解决方案资源管理器中的项目上单击鼠标右键,然后单击“属性”。 转到Build选项卡并从下拉列表中选择调试配置。 确保选中“定义调试常量” 对发布配置执行相同的操作,但确保未选中“definedebug常量” 这将确保所有
#if DEBUG
指令按照您的期望工作
编辑:
由于您使用的是网站项目,请进入system.web部分下的web.config文件,找到或添加节点。此属性将打开和关闭调试常量。您可能正试图在ASPX页面中使用
#if
预处理器仅在C#source中受支持
相反,如果符合以下条件,则可以使用普通的:
<% if (HttpContext.Current.IsDebuggingEnabled) { %>
...
<% } %>
...
此属性反映Web.config中是否存在
你也许会写作
<%
#if DEBUG %>
...
<%
#endif%>
...
(注意换行符),但我认为它不会起作用。您可能正在尝试在ASPX页面中使用#if
预处理器仅在C#source中受支持
相反,如果符合以下条件,则可以使用普通的:
<% if (HttpContext.Current.IsDebuggingEnabled) { %>
...
<% } %>
...
此属性反映Web.config中是否存在
你也许会写作
<%
#if DEBUG %>
...
<%
#endif%>
...
(注意换行符),但我认为它不会起作用。在ASP.NET标记中不能使用#if
。如果使用代码隐藏,则可以在标记中执行以下操作:
<asp:PlaceHolder runat="server" ID="DebugOutput" EnableViewstate="false" Visible="false">
<asp:Literal runat="server" ID="OutputValue" />
</asp:PlaceHolder>
您可以使用面板而不是占位符,但是面板有一个控件状态,即使viewstate被禁用,因此即使在发布代码中,您也会在viewstate中获得该面板的条目。如果在ASP.NET标记中使用。
。如果使用代码隐藏,则可以在标记中执行以下操作:
<asp:PlaceHolder runat="server" ID="DebugOutput" EnableViewstate="false" Visible="false">
<asp:Literal runat="server" ID="OutputValue" />
</asp:PlaceHolder>
您可以使用面板而不是占位符,但面板具有控件状态,