[问]VS2005,C#winform程序,代码修改app.config的结果保存到哪里了? - 老坛酸菜WH - 博客园

mikel阅读(856)

来源: [问]VS2005,C#winform程序,代码修改app.config的结果保存到哪里了? – 老坛酸菜WH – 博客园

通过Properties.Settings用代码形式读写app.config文件,其中Properties.Settings变量的范围”scope”都设置为用户”user”(注:如果改为”Application”,编译时系统提示其为只读属性),读写都正常,并且重新打开exe文件时,上次输入的值仍然存在,但是手动打开”test.exe.config”,所有的设置变量值均为空,写入的值都保存到什么地方去了呢?临时文件?我用360安全卫士清除临时文件后在此打开exe文件,上次输入的值依然存在。有谁知道这是怎么回事?

示例代码:
private void button1_Click(object sender, EventArgs e)
{
//读操作,将读到的值送textBox1显示
Properties.Settings config = Properties.Settings.Default;
textBox1.Text = config.myvar;
}

private void button2_Click(object sender, EventArgs e)
{
//写操作,将textBox2里的值写入myvar
Properties.Settings config = Properties.Settings.Default;
config.myvar = textBox2.Text;
config.Save();

C:\Documents and Settings\Administrator\Local Settings\Application Data\XXXX\XXXX.exe_Url_oovadpuqzn4jm2rhpjt5sp0hl11zsg3f\1.0.0.0\user.config
在这呐!!!
我也找了好久。

C# winForm 开机自动启动 并启动后最小化到任务栏 右侧通知栏并交互操作 - 无恨星晨 - 博客园

mikel阅读(1144)

来源: C# winForm 开机自动启动 并启动后最小化到任务栏 右侧通知栏并交互操作 – 无恨星晨 – 博客园

//设置自动启动
string path = Application.StartupPath;
SettingHel.SetAutoRun(path +@”\MostImpressive.DSCJ.DcbInterface.exe”, true);

public static class SettingHel
{
///

/// 设置应用程序开机自动运行
///

///应用程序的文件名 ///是否自动运行,为false时,取消自动运行 /// 设置不成功时抛出异常
/// 返回1成功,非1不成功
public static String SetAutoRun(string fileName, bool isAutoRun)
{
string reSet = string.Empty;
RegistryKey reg = null;
try
{
if (!System.IO.File.Exists(fileName))
{
reSet = "该文件不存在!";
}
string name = fileName.Substring(fileName.LastIndexOf(@"\") + 1);
reg = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);
if (reg == null)
{
reg = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
}
if (isAutoRun)
{
reg.SetValue(name, fileName);
reSet = "1";
}
else
{
reg.SetValue(name, false);
}

}
catch (Exception ex)
{
//“记录异常”
}
finally
{
if (reg!=null)
{
reg.Close();
}
}
return reSet;
}

}

设置.exe程序自动启动

C# winForm启动最小化到任务栏右侧通知栏并交互操作

一。主要功能:
(1)、程序启动自动隐藏到任务栏右侧通知栏显示。(与系统托盘同义)
(2)、双击系统托盘图标显示、隐藏窗口;
(3)、右击系统托盘图标提供三个菜单选项,“退出”、“隐藏”、“显示”;

二。相关控件:
1、建一个WinForm程序—IconForm,将Form属性ShowInTaskbar改为false,这样程序将不会在任务栏中显示。
2、将Form属性WindowState选择为 Minimized,以便起来自动最小化隐藏
3、在工具栏中的“公共控件”里,拖入NotifyIcon控件—notifyIcon1,这个是程序运行任务栏右侧通知区域图标显示控件,为控件notifyIcon的属性Icon添加一个icon图标,或从代码中加入。
4、在工具栏中的“菜单和工具栏”里,拖入ContextMenuStrip—contextMenuStrip1,这个控件是右击时关联菜单。
5、右键notifyIcon1选择属性,将其属性ContextMenuStrip改加为contextMenuStrip1,这个时候notifyIcon1和contextMenuStrip1两个控件就关联了。
6、右键contextMenuStrip1,选择属性,进入Items,然后点击“添加”,这里添加三个菜单选项:exitMenuItem、hideMenuItem、showMenuItem,同时分别将其Text属性改为:退出、隐藏和显示。

三。主要代码:
1、双击IconForm,即添加Load事件然后

//一 右击窗体,选择属性,转到事件页面,双击 Load,SizeChanged事件,给窗体添加代码
private void Form1_Load(object sender, EventArgs e)
{
//1.将Form属性ShowInTaskbar改为false,这样程序将不会在任务栏中显示。
//2.将Form属性WindowState选择为 Minimized,以便起来自动最小化隐藏。
string startup = Application.ExecutablePath; //取得程序路径
int pp = startup.LastIndexOf(“\\”);
startup = startup.Substring(0, pp);
string icon = startup + “\\testIcon.ico“;
//3.一定为notifyIcon1其设置图标,否则无法显示在通知栏。或者在其属性中设置
notifyIcon1.Icon = new Icon(icon);

}

private void Form1_SizeChanged(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized)
{
this.Hide(); //或者是this.Visible = false;
this.notifyIcon1.Visible = true;
}

}

 

//二 双击窗体上的菜单项,添加相关代码
private void exitMenuItem_Click(object sender, EventArgs e)
{
if (MessageBox.Show(“你确定要退出程序吗?”, “确认”, MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.OK)
{
notifyIcon1.Visible = false;
this.Close();
this.Dispose();
Application.Exit();
}

}

private void hideMenuItem_Click(object sender, EventArgs e)
{
this.Hide();

}

private void showMenuItem_Click(object sender, EventArgs e)
{
this.Show();
this.WindowState = FormWindowState.Normal;
this.Activate();

}

//三 转到窗体设计模式,右击notifyIcon1 ,选择属性,双击其中DoubleClick,添加相关代码
private void notifyIcon1_DoubleClick(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Normal)
{
this.WindowState = FormWindowState.Minimized;
this.Hide();
}
else if (this.WindowState == FormWindowState.Minimized)
{
this.Show();
this.WindowState = FormWindowState.Normal;
this.Activate();
}

}

 

四。完整的代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace IconForm
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//说明,程序运行后自动隐藏到任务栏右侧的通知栏里,
//1 右击选择退出,隐藏,显示
//2 双击可以隐藏和显示切换

//一 右击窗体,选择属性,转到事件页面,双击 Load,SizeChanged事件,给窗体添加代码
private void Form1_Load(object sender, EventArgs e)
{
//1.将Form属性ShowInTaskbar改为false,这样程序将不会在任务栏中显示。
//2.将Form属性WindowState选择为 Minimized,以便起来自动最小化隐藏。
string startup = Application.ExecutablePath; //取得程序路径
int pp = startup.LastIndexOf(“\\”);
startup = startup.Substring(0, pp);
string icon = startup + “\\testIcon.ico“;
//3.一定为notifyIcon1其设置图标,否则无法显示在通知栏。或者在其属性中设置
notifyIcon1.Icon = new Icon(icon);

}

private void Form1_SizeChanged(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized)
{
this.Hide(); //或者是this.Visible = false;
this.notifyIcon1.Visible = true;
}

}

//二 双击窗体上的菜单项,添加相关代码
private void exitMenuItem_Click(object sender, EventArgs e)
{
if (MessageBox.Show(“你确定要退出程序吗?”, “确认”, MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.OK)
{
notifyIcon1.Visible = false;
this.Close();
this.Dispose();
Application.Exit();
}

}

private void hideMenuItem_Click(object sender, EventArgs e)
{
this.Hide();
}

private void showMenuItem_Click(object sender, EventArgs e)
{
this.Show();
this.WindowState = FormWindowState.Normal;
this.Activate();

}

//三 转到窗体设计模式,右击notifyIcon1 ,选择属性,双击其中DoubleClick,添加相关代码
private void notifyIcon1_DoubleClick(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Normal)
{
this.WindowState = FormWindowState.Minimized;

this.Hide();
}
else if (this.WindowState == FormWindowState.Minimized)
{
this.Show();
this.WindowState = FormWindowState.Normal;
this.Activate();
}

}
}
}

“log4net.Core.LoggerManager”的类型初始值设定项引发异常 - eatonfang的专栏 - CSDN博客

mikel阅读(1463)

来源: “log4net.Core.LoggerManager”的类型初始值设定项引发异常 – eatonfang的专栏 – CSDN博客

1、今天在使用log4net的时候,配置都完毕了,启动运行程序,

运行到以下代码实例化log对象的时候,出错,提示:“log4net.Core.LoggerManager”的类型初始值设定项引发异常

log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));

 

看了一下app.config配置,都没问题,后来把错误详细信息(如下)打开一看,才发现配置的时候,<configSections> 元素,必须是根 <configuration> 元素的第一个子元素。

改了以后,问题解决。

 

错误信息:

未处理 System.TypeInitializationException
Message=“log4net.Core.LoggerManager”的类型初始值设定项引发异常。
Source=log4net
TypeName=log4net.Core.LoggerManager
StackTrace:
在 log4net.Core.LoggerManager.GetLogger(Assembly repositoryAssembly, String name)
在 log4net.LogManager.GetLogger(Assembly repositoryAssembly, String name)
在 log4net.LogManager.GetLogger(Type type)
在 Program.Main(String[] args) 位置 E:\Program.cs:行号 16
在 System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
在 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
在 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
在 System.Threading.ThreadHelper.ThreadStart()
InnerException: System.TypeInitializationException
Message=“log4net.Util.LogLog”的类型初始值设定项引发异常。
Source=log4net
TypeName=log4net.Util.LogLog
StackTrace:
在 log4net.Util.LogLog.Debug(String message)
在 log4net.Core.LoggerManager..cctor()
InnerException: System.Configuration.ConfigurationErrorsException
Message=配置系统未能初始化
Source=System.Configuration
BareMessage=配置系统未能初始化
Line=0
StackTrace:
在 System.Configuration.ConfigurationManager.PrepareConfigSystem()
在 System.Configuration.ConfigurationManager.GetSection(String sectionName)
在 System.Configuration.PrivilegedConfigurationManager.GetSection(String sectionName)
在 System.Diagnostics.DiagnosticsConfiguration.GetConfigSection()
在 System.Diagnostics.DiagnosticsConfiguration.Initialize()
在 System.Diagnostics.DiagnosticsConfiguration.get_IndentSize()
在 System.Diagnostics.TraceInternal.InitializeSettings()
在 System.Diagnostics.TraceInternal.WriteLine(String message)
在 System.Diagnostics.Trace.WriteLine(String message)
在 log4net.Util.LogLog.EmitErrorLine(String message)
在 log4net.Util.LogLog.Error(String message, Exception exception)
在 log4net.Util.LogLog..cctor()
InnerException: System.Configuration.ConfigurationErrorsException
Message=每个配置文件中只允许存在一个 <configSections> 元素,并且,如果存在该元素,它还必须是根 <configuration> 元素的第一个子元素。 (E:\★項目\4.物流\0.VSS物流\中邮云南供应链信息平台\02_source\SCM\SCM.Batch\BAT.AlarmManagement\AlarmBatch\bin\Release\BAT.AlarmManagement.vshost.exe.Config line 10)
Source=System.Configuration
BareMessage=每个配置文件中只允许存在一个 <configSections> 元素,并且,如果存在该元素,它还必须是根 <configuration> 元素的第一个子元素。
Filename=E:\★項目\4.物流\0.VSS物流\中邮云南供应链信息平台\02_source\SCM\SCM.Batch\BAT.AlarmManagement\AlarmBatch\bin\Release\BAT.AlarmManagement.vshost.exe.Config
Line=10
StackTrace:
在 System.Configuration.ConfigurationSchemaErrors.ThrowIfErrors(Boolean ignoreLocal)
在 System.Configuration.BaseConfigurationRecord.ThrowIfParseErrors(ConfigurationSchemaErrors schemaErrors)
在 System.Configuration.BaseConfigurationRecord.ThrowIfInitErrors()
在 System.Configuration.ClientConfigurationSystem.EnsureInit(String configKey)
InnerException:

2、运行没错了,但是后面又有问题了,就是log文件怎么跑都没见生成,程序运行也不出错,后来调查,原来是配置完以后,要正常使用,使用前通过下面方法需要加载配置:

log4net.Config.XmlConfigurator.Configure();

加载的时候,web程序一般都是写在Global 的Application_Start里面,这样,web网站启动的时候就全局加载。 其它的winform或者控制台应用程序在program的开头加上即可。
————————————————
版权声明:本文为CSDN博主「eatonfang」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/eatonfang/article/details/40622945

C#遍历DataSet中数据的几种方法总结 - 隋旭峰的专栏 - CSDN博客

mikel阅读(1377)

来源: C#遍历DataSet中数据的几种方法总结 – 隋旭峰的专栏 – CSDN博客

//多表多行多列的情况
foreach   (DataTable   dt   in   YourDataset.Tables)   //遍历所有的datatable
{
foreach   (DataRow   dr   in   dt.Rows)   ///遍历所有的行
foreach   (DataColumn   dc   in   dt.Columns)   //遍历所有的列
Console.WriteLine(“{0},   {1},   {2}”,   dt.TableName,

dc.ColumnName,   dr[dc]);   //表名,列名,单元格数据
}
//遍历一个表多行多列
foreach(DataRow   mDr   in   dataSet.Tables[0].Rows   )
{
foreach(DataColumn   mDc   in   dataSet.Tables[0].Columns)
{
Console.WriteLine(mDr[mDc].ToString());
}
}
//遍历一个表多行一列
foreach(DataRow   row   in   DataSet1.Tables[0].Rows)
{
Console.WriteLine(row[0].ToString());
}

//一行一列
ds.Tables[0].Rows[0][“字段”]

MS SQL Server 数据库连接字符串详解 - X君 - 博客园

mikel阅读(1157)

来源: MS SQL Server 数据库连接字符串详解 – X君 – 博客园

原地址:http://blog.csdn.net/jhhja/article/details/6096565

问题 : 超时时间已到。在从池中获取连接之前超时时间已过。出现这种情况可能是因为所有池连接都已被使用并已达到最大池大小。

解决办法 1. 在代码里面 , 把未关闭的连接关闭 2. 扩大共享池 , 方法如下 : 解决方法可以是修改连接池的连接生存期 , 因为默认值是 60 秒 , 即连接从应用程序被释放后可以在池中保存的时间。 具体操作步骤如下: 如果是 ODBC 的话,则可以在 ODBC Data Source Administrator 中手动更改,该程序位于 “Start” 菜单中的 “Programs”->”Adminstrative Tools” (中文名:管理工具)下,或从 “Control Panel”( 中文名:控制面板 ) 中打开 “ODBC Data Source Administrator” ( ODBC 数据源管理器),再选择 “Connection Pooling” (连接池)选项卡,双击驱动程序中的 “SQL Server” ,选择 “Pool Connetions to this drive”( 使用池连接该驱动程序 ) ,把下面的时间 60 秒改的大一点,例如 120 。 如果是 SQLConnection 的共享连接,则为 ConnectionString 属性 Connection Lifetime 数值名称指定一个值,该值默认情况下是 0 ,表示连接永远不会从池中被自动移走。如果指定一个不同的值,那么一旦连接被返回到池中,该值将和连接的创建时间及当前时间进行比较。如果生存期超过了 Connection Lifetime 的值,那么连接将从池中被移走。

问题的原因是与数据库的连接没有显示关闭 , 而等系统自动回收是要时间的 . 解决的方法是改变连接池的大小 . 在连接字符串的后面加上以下代码 : Enlist=true;Pooling=true;Max Pool Size=300;Min Pool Size=0;Connection Lifetime=300;user id=sa;packet size=1000 packet size 参数取 512 到 32767 中的任一整数值

 

注 释:

SqlConnection.ConnectionString 属性

ConnectionString 类似于 OLE DB 连接字符串,但并不相同。与 OLE DB 或 ADO 不同,如果 “Persist Security Info ” 值设置为 false (默认值),则返回的连接字符串与用户设置的 ConnectionString 相同但去除了安全信息。除非将 “Persist Security Info ” 设置为 true ,否则, SQL Server .NET Framework 数据提供程序将不会保持,也不会返回连接字符串中的密码。

可以使用 ConnectionString 属性连接到数据库。下面的示例阐释了一个典型的连接字符串。

Persist Security Info=False;Integrated Security=SSPI;database=northwind;server=mySQLServer
 

 

只有在连接关闭时才能设置 ConnectionString 属性。许多连接字符串值都具有相应的只读属性。当设置连接字符串时,将更新所有这些属性(除非检测到错误)。检测到错误时,不会更新任何属性。 SqlConnection 属性只返回那些包含在 ConnectionString 中的设置。

若要连接到本地机器,请将服务器指定为 “(local)” 。(必须始终指定一个服务器。)

重置已关闭连接上的 ConnectionString 会重置包括密码在内的所有连接字符串值(和相关属性)。例如,如果设置一个连接字符串,其中包含 “Database= northwind” ,然后再将该连接字符串重置为 “Data Source=myserver;Integrated Security=SSPI” ,则 Database 属性将不再设置为 Northwind 。

在设置后会立即分析连接字符串。如果在分析时发现语法中有错误,则产生运行库异常,如 ArgumentException 。只有当试图打开连接时,才会发现其他错误。

连接字符串的基本格式包括一系列由分号分隔的关键字 / 值对。等号  (=) 连接各个关键字及其值。若要包括含有分号、单引号字符或双引号字符的值,则该值必须用双引号括起来。如果该值同时包含分号和双引号字符,则该值可以用单引号括起来。如果该值以双引号字符开始,则还可以使用单引号。相反地,如果该值以单引号开始,则可以使用双引号。如果该值同时包含单引号和双引号字符,则用于将值括起来的引号字符每次出现时,都必须成对出现。

若要在字符串值中包括前导或尾随空格,则该值必须用单引号或双引号括起来。即使将整数、布尔值或枚举值用引号括起来,其周围的任何前导或尾随空格也将被忽略。然而,保留字符串关键字或值内的空格。若要在关键字或值中包括等号 (=) ,则它之前必须还有另一个等号。例如,在假设的连接字符串中,

“key==word=value”

关键字是 “key=word” 并且值是 “value” 。

如果 “keyword= value” 对中的一个特定关键字多次出现在连接字符串中,则将所列出的最后一个用于值集。

关键字不区分大小写。

下表列出了 ConnectionString 中的关键字值的有效名称。

名称

默认值

说明

Application Name

应用程序的名称,如果不提供应用程序名称,默认是: “.Net  SqlClient Data Provider”

AttachDBFilename   – 或 – extended properties   – 或 – Initial File Name

可连接数据库的主文件的名称,包括完整的路径名。

必须使用关键字 “database” 来指定数据库的名称。

Connect Timeout   – 或 – Connection Timeout

15

在终止尝试连接并产生错误之前,等待与服务器的连接的时间长度(以秒为单位)。

Current Language

SQL Server 语言

Data Source   – 或 – Server   – 或 – Address   – 或 – Addr   – 或 – Network Address

要连接的 SQL Server 实例的名称或网络地址。

Encrypt

‘false’

当该值为 true 时,如果服务器端安装了证书,则 SQL Server 将对所有在客户端和服务器之间传送的数据使用 SSL 加密。可识别的值为 true 、 false 、 yes 和 no 。

Initial Catalog   – 或 – Database

数据库的名称。

Integrated Security   – 或 – Trusted_Connection

‘false’

当为 false 时,将在连接中指定用户 ID 和密码。当为 true 时,将使用当前的 Windows 帐户凭据进行身份验证。

可识别的值为 true 、 false 、 yes 、 no 以及与 true 等效的 sspi (强烈推荐)。

Network Library   – 或 – Net

‘dbmssocn’

用于建立与 SQL Server 实例的连接的网络库。支持的值包括 dbnmpntw (命名管道)、 dbmsrpcn (多协议)、 dbmsadsn (Apple  Talk) 、 dbmsgnet  (VIA) 、 dbmslpcn (共享内存)及 dbmsspxn (IPX/SPX) 和 dbmssocn (TCP/IP) 。

相应的网络 DLL 必须安装在要连接的系统上。如果不指定网络而使用一个本地服务器(比如 “.” 或 “(local)” ),则使用共享内存。

Packet Size

8192

用来与 SQL Server 的实例进行通讯的网络数据包的大小,以字节为单位。

Password   – 或 – Pwd

SQL Server 帐户登录的密码(建议不要使用。为了维护最高级别的安全性,强烈建议改用 Integrated Security 或 Trusted_Connection 关键字)。

Persist Security Info

‘false’

当该值设置为 false 或 no (强烈推荐)时,如果连接是打开的或者一直处于打开状态,那么安全敏感信息(如密码)将不会作为连接的一部分返回。重置连接字符串将重置包括密码在内的所有连接字符串值。可识别的值为 true 、 false 、 yes 和 no 。

User ID

SQL Server 登录帐户(建议不要使用。为了维护最高级别的安全性,强烈建议改用 Integrated Security 或 Trusted_Connection 关键字)。

Workstation ID

本地计算机名称

连接到 SQL Server 的工作站的名称。

下表列出了 ConnectionString 内连接池值的有效名称。有关连接池的更多信息,请参见 SQL Server .NET Framework 数据提供程序连接池。

名称

默认值

说明

Connection Lifetime

0

当连接被返回到池时,将其创建时间与当前时间作比较,如果时间长度(以秒为单位)超出了由 Connection Lifetime 指定的值,该连接就会被销毁。这在聚集配置中很有用(用于强制执行运行中的服务器和刚置于联机状态的服务器之间的负载平衡)。

零 (0) 值将使池连接具有最大的连接超时。

Connection Reset

‘true’

确定从池中提取数据库连接时是否重置数据库连接。对于 Microsoft SQL Server 7.0 版,设置为 false 可避免获取连接时再有一次额外的服务器往返行程,但须注意此时并未重置连接状态(如数据库上下文)。

Enlist

‘true’

当该值为 true 时,池程序在创建线程的当前事务上下文中自动登记连接。可识别的值为 true 、 false 、 yes 和 no 。

Max Pool Size

100

池中允许的最大连接数。

Min Pool Size

0

池中允许的最小连接数。

Pooling

‘true’

当该值为 true 时,系统将从相应池中提取 SQLConnection 对象,或在必要时创建该对象并将其添加到相应池中。可识别的值为 true 、 false 、 yes 和 no 。

当设置需要布尔值的关键字或连接池值时,您可以使用 ‘yes’ 代替 ‘true’ , ‘no’ 代替 ‘false’ 。整数值表示为字符串。

注意    SQL Server .NET Framework 数据提供程序使用它自己的协议与 SQL Server 进行通信。因此,当连接到 SQL Server 时,它不支持 ODBC 数据源名称 (DSN) 的使用,因为它不添加 ODBC 层。  警告     在此版本中,在应用程序中根据用户输入构造连接字符串时(例如,从对话框中检索用户 ID 和密码信息并将其追加到连接字符串时)应相当谨慎。应用程序应确保用户无法在这些值中嵌入额外的连接字符串参数(例如,输入 “validpassword;database=somedb” 作为密码,以试图连接到其他数据库)。

无法识别的配置节log4net的(Unrecognized configuration section log4net) - herizai - 博客园

mikel阅读(1482)

来源: 无法识别的配置节log4net的(Unrecognized configuration section log4net) – herizai – 博客园

每个配置文件中只允许存在一个 <configSections> 元素,并且,如果存在该元素,它还必须是根 <configuration> 元素的第一个子元素。

 

问题:

I have this code in web.config:

复制代码
<log4net>
  <root>
    <level value="ALL" />
    <appender-ref ref="LogFileAppender" />
  </root>
  <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="D:\logFileFaculty.txt" />
    <param name="AppendToFile" value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="10MB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
  </appender>
</log4net>
复制代码

And I have downloaded log4net.dll and placed it in Bin Folder.

In one of My aspx.cs pages I have added this code:

using log4net;
[assembly: log4net.Config.XmlConfigurator(Watch = true)]


private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

But it’s giving error as Unrecognized configuration section log4net.

 

解决方案:

You need to declare the log4net section:

<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>

Take a closer look at the documentation which explains the necessary things to do.

C# log4net 的配置 - ???笨小孩 - 博客园

mikel阅读(1034)

来源: C# log4net 的配置 – ???笨小孩 – 博客园

项目的日志组件是必备可少的,任何项目中都需要。这样既方便前期的开发测试也方便项目后期的项目维护。C#项目的一个不错的日志组件是log4net,下面我就把网站项目、桌面应用程序项目log4net的如何配置粗略的介绍一下。

网站项目中的配置

首先,你得确保你的电脑是联网的。确保这一点后,我们就是先给项目中安装log4net。安装的方法有很多种,我粗略介绍一下我经常使用的方法:使用Visual Studio 2013(我这里使用的是2013)打开项目,在“解决方案资源管理器”的项目目录中找到“引用”鼠标右键弹出菜单中点击“管理NuGet程序包(N)…”就会弹出一个管理窗口如下图:

图1

如果这样不行的话可以试试“程序包管理器控制台”用命令安装:先要打开控制台,在“工具”“NuGet程序包管理器”“程序包管理器控制台”这样就可以打开程序包管理器控制台。

那么安装命令不会怎么办?这个好办还是像图1的窗口做如下操作:

图2

 

图3

 

图4

这样就把log4net的程序包安装到项目中,接下来就是怎么在项目中配置了。首先讲解网站项目中是怎么配置的。

第一步:在Web.config文件中做如下配置,先上图看一下究竟:

图5

图6

下是图5、图6中的配置文件中的代码:

 

复制代码
 <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />




  <log4net>
    <!-- OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL -->
    <!-- Set root logger level to ERROR and its appenders -->
    <root>
      <level value="ALL" />
      <appender-ref ref="SysAppender" />
    </root>
    <!-- Print only messages of level DEBUG or above in the packages -->
    <logger name="WebLogger">
      <level value="DEBUG" />
    </logger>
    <appender name="SysAppender" type="log4net.Appender.RollingFileAppender,log4net">
      <param name="File" value="App_Data/" />
      <param name="AppendToFile" value="true" />
      <param name="RollingStyle" value="Date" />
      <param name="DatePattern" value="&quot;Logs_&quot;yyyyMMdd&quot;.txt&quot;" />
      <param name="StaticLogFileName" value="false" />
      <layout type="log4net.Layout.PatternLayout,log4net">
        <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
      </layout>
    </appender>
    <appender name="consoleApp" type="log4net.Appender.ConsoleAppender,log4net">
      <layout type="log4net.Layout.PatternLayout,log4net">
        <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
      </layout>
    </appender>
  </log4net>
复制代码

第二步,先贴图下面贴出代码:

图7

图7中的代码:

 //配置log4
            log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(Server.MapPath("~/Web.config")));

这样网站项目中log4net的配置工作就完成了。

最后一步是怎么在项目代码中应用了,我也简单的说一下,就是简单的使用,复杂的就不说了。还是跟上面一样上图说话:

图8

下面图9是项目中产生的日志:

图9

网站项目中log4net的配置就全部完成了,网上还有很多其他的配置方法,我这里只是讲解自己比较常使用的简单的配置方法。

桌面应用程序、控制台应用程序、Windows服务项目中log4net的配置

第一步:跟上面网站项目配置一样先把log4net程序包安装到项目中,两种方式。这里就不再重复讲解了,有什么不懂看上文就可以了。

第二步:也是一样只是由Web.config变成App.config文件代码还是一样,如图10:

图10

第三步:有点不一样了,我们要在项目中的AssemblyInfo.cs中加一行代码:

 

//log4net从配置文件中读取配置
[assembly: log4net.Config.XmlConfigurator(ConfigFileExtension = "config", Watch = true)]

 

如图11:

图11

 

最后一步就是在项目中使用了,跟网站项目中的使用一样就可以了。

有关log4net的配置工作就全部讲解完了,希望对大家有所帮助,有不足之地和错误希望指正和谅解!!!

细细品味C#——Timer及多线程编程 - 虾皮 - 博客园

mikel阅读(1164)

来源: 细细品味C#——Timer及多线程编程 – 虾皮 – 博客园

你对C#中的Timer了解多少?知道有三种Timer吗?他们的区别是什么?编程时选择哪个比较合适?

  你会线程(Thread)编程吗?多线程编程又知道多少?断点续传又知多少?

  一口气提了这么多问题,其实也是鄙人心中的疑惑,在前几日的编写Vod下载器中就遇到了线程的问题,包括Timer的使用,所以为了进一步学习,才把相关的好文章整理成册,重点强化一下,同时分享出来让那些和我一样欠缺这方面的同仁一同提高。

  文章下载地址:http://files.cnblogs.com/xia520pi/C_Sharp_Timer_Thread.rar

  文章的目录:

1、C#的Timer解析

1.1、版权声明

1.2、内容详情

2、Timer范例教程

2.1、版权声明

2.2、内容详情

3、Socket网络编程大全

3.1、版权声明

3.2、内容详情

3.2.1 简单服务器端

3.2.2 简单客户端

3.2.3 获得本机IP

3.2.4 端对端通信

3.2.5 点对点通信

3.2.6 UDP对时服务器端

3.2.7 UDP对时客户端

3.2.8 点对点传输文件

3.2.9 发送邮件

3.2.10 接收邮件

4、多线程使用thread、threadpool、timer

4.1、版权声明

4.2、内容详情

5、谈谈多线程的思维方式

5.1、版权声明

5.2、内容详情

6、断点续传、多线程上载

6.1、版权声明

6.2、内容详情

7、C#多线程学习

7.1、版权声明

7.2、内容详情

7.2.1 多线程的相关概念

7.2.2 如何操纵一个线程

7.2.3 生产者和消费者

7.2.4 多线程的自动管理(线程池)

7.2.5 多线程的自动管理(定时器Timer)

7.2.6 互斥对象Mutex

8、C#多线程编程

8.1、版权声明

8.2、内容详情

8.2.1 lock使用注意事项

8.2.2 集合类中Synchronized与SyncRoot属性原理分析

8.2.3 Monitor使用示例及Mutex简介

8.2.4 同步事件和等待句柄

8.2.5 Timer(定时器)使用示例

8.2.6 volatile关键字的原理探讨

8.2.7 Interlocked类操作

8.2.8 使用Semaphore类限制资源并发访问数

8.2.9 用ReaderWriterLock类实现多用户读/单用户写同步

8.2.10 异步方法调用

8.2.11 异步事件调用

8.2.12 BackgroundWorker

C# 指定平台编译项目 - 古兴越 - 博客园

mikel阅读(1643)

来源: C# 指定平台编译项目 – 古兴越 – 博客园

如CefSharp就需要指定平台,项目为Any CPU时,无法编译,总会提示出错。

如:

CefSharp.Common contains unmanaged resoures, set your project and solution platform to x86 or x64.

 

配置方式:

在解决方案右键属性 – 配置属性 – 配置 – 配置管理器 – 活动解决方案平台 – 新建 – 新建解决方案平台。

大致是这样。