自定义dll类库添加调试代码

      在一个基于B/S的采集系统中添加了自定义dll类库文件,在VS中测试正常,发布后出现了问题,因为发布后的网页不再具有调试功能,并且原代码中没有发现问题,猜想可能是网站架设或者权限的问题,为了再页面运行时捕获异常信息,所以自定义了一个调试类,这个类很简单,目的是将异常信息写入到一个指定的文件(xmlconfig)中,代码如下:

 public static void write(string msg)
{
try {
string _CodeBase = System.Reflection.Assembly.GetExecutingAssembly().CodeBase;//获取最初程序集位置
string path = _CodeBase.Substring(8, _CodeBase.LastIndexOf('/') - 8);//获取程序所在文件夹
path = path.Substring(0, path.LastIndexOf('/')) + "/xmlconfig/log.txt";//获取程序所在文件夹的上级目录并加上调试log文件字符串得到log文件完整路径
using (StreamWriter sw = File.AppendText(path)) {//声明一个写数据流StreamWriter运用File的AppendText()方法追加文件,如果不存在则创建
sw.WriteLine(DateTime.Now + " " + msg);//往里面写入消息
}
} catch {}
}

用的时候只需要在可能出错的地方加入logwrite.write("");即可

例如:

 /// <summary>
/// 从xml文件里面得到所有的新闻配置信息
/// </summary>

private void getAllNews()
{
//logwrite.write("开始从xml文件里面得到所有的新闻配置信息");
try {
ItemsConfig itemsConfig = new ItemsConfig();
string[] reg;
List<ItemsConfig> list = new List<ItemsConfig>();
XmlDataDocument xmlDoc = new XmlDataDocument();
string _CodeBase = System.Reflection.Assembly.GetExecutingAssembly().CodeBase;
string filename = _CodeBase.Substring(8, _CodeBase.LastIndexOf('/') - 8);
filename = filename.Substring(0, filename.LastIndexOf('/')) + "/xmlconfig/CitysWebs.xml";
xmlDoc.Load(filename);
XmlNodeList topItems = xmlDoc.DocumentElement.ChildNodes;
//logwrite.write("打开cityswebs.xml文件");
if (topItems.Count > 0) {
//logwrite.write("一共遍历"+topItems.Count+"个城市节点");
for (int i = 0; i < topItems.Count; i++) {
XmlNode node = topItems[i];
XmlAttribute nodeItem = node.Attributes["city"];
itemsConfig.City = nodeItem.Value;
XmlNodeList nodeItems = node.ChildNodes;
if (nodeItems.Count > 0) {
//logwrite.write(itemsConfig.City+"一共有"+nodeItems.Count + "个网站");
for (int j = 0; j < nodeItems.Count; j++) {
try {
XmlAttribute urlItem = nodeItems[j].Attributes["Url"];
itemsConfig.Url = urlItem.Value;
XmlNodeList rowsItems = nodeItems[j].ChildNodes;
XmlAttribute row = rowsItems[j].Attributes[0];
itemsConfig.Reg = row.Value;
XmlNodeList columnsItems = rowsItems[j].ChildNodes;
reg = new string[columnsItems.Count];
reg[0] = columnsItems[0].Attributes["reg"].Value.ToString();
reg[1] = columnsItems[1].Attributes["reg"].Value.ToString();
reg[2] = columnsItems[2].Attributes["reg"].Value.ToString();
reg[3] = columnsItems[3].Attributes["reg"].Value.ToString();
reg[4] = columnsItems[4].Attributes["reg"].Value.ToString();
reg[5] = columnsItems[5].Attributes["reg"].Value.ToString();

itemsConfig.ColumnsReg = reg;//从xml中获取采集网站的url和规则
//logwrite.write("得到"+itemsConfig.Url+"的配置文件并开始得到新闻");
getNews(itemsConfig);//一个url的配置传入getnews方法
} catch (Exception em) {
logwrite.write(em.Message);
}

}
}
}
}
} catch(Exception ex) {
logwrite.write(ex.Message);
}
}

其中你可以看到可以写在try-catch语句中用来捕获异常.

这个方法其实还可以用MessageBox.Show("")来做.或者用js,但是对于一个dll类库来说有点不合适,特别我做的dll类库其实想让web以及应用程序都能调用,所以想到这个方法.可能还有弄好的方法.欢迎板砖

posted @ 2011-09-24 17:21  栗子哥  阅读(348)  评论(0)    收藏  举报