我是C#/Asp.net World的新手,最近我遇到了#if DEBUG PreProcessor,但即使看了Stack Over flow和MSDN网站和其他博客上的帖子,我也不能让它工作。
我正在做一个小网站。我通过在解决方案中添加一个新项目来实现DataLayer。在数据层中,我正在检查传递给存储过程的参数。
因此,目的是打印应用程序在调试模式下运行时传递的参数,以及当应用程序在发布模式下运行时不应显示这些参数。
任何帮助都将不胜感激。
谢谢
#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;
}
}
} 发布于 2010-12-09 00:51:41
您可能正在尝试在ASPX页面中使用#if。
预处理器仅在C#源代码中受支持。
相反,您可以使用普通的if
<% if (HttpContext.Current.IsDebuggingEnabled) { %>
...
<% } %>此属性反映Web.config中是否存在<compilation debug="true">。
你也许能写出
<%
#if DEBUG %>
...
<%
#endif%>(注意换行符),但我认为它不会起作用。
发布于 2010-12-09 00:50:59
在解决方案资源管理器中右击项目,再单击“属性”。转到Build选项卡,然后从下拉菜单中选择Debug configuration。确保选中了“定义调试常量”。
对Release配置执行相同的操作,但确保未选中“定义调试常量”。
这将确保所有
#if DEBUG指令的工作方式与您预期的一样。
编辑:由于您使用的是网站项目,请进入web.config文件,在system.web部分下找到或添加一个节点。此属性将打开和关闭调试常量。
发布于 2010-12-09 00:54:33
不能在ASP.NET标记中使用#if。如果使用代码隐藏,则可以在标记中执行以下操作:
<asp:PlaceHolder runat="server" ID="DebugOutput" EnableViewstate="false" Visible="false">
<asp:Literal runat="server" ID="OutputValue" />
</asp:PlaceHolder>在你的代码中:
#if DEBUG
DebugOutput.Visible = true;
OutputValue.Text = "My output string";
#endif您可以使用面板而不是占位符,但是即使在禁用viewstate的情况下,面板也具有控件状态,因此即使在发布代码中,也会在viewstate中获得该面板的条目。
https://stackoverflow.com/questions/4389979
复制相似问题