ASP.NET自定义配置文件设置在ASP.NET开发的过程中,我们经常会遇到在开发、测试、发布部署等不同的环境下使用不同的连接字符串,WebAPI的连接。为了避免频频复杂的修改各个配置,因此用到了自定义配置文件设置。此篇文章使用的自定义配置文件方法为:web.config增加自定义Section节,相关配置全部放到webconfig。一、配置Web.config文件。1.0首先需要在configuration节点下的configSections节点中进行注册,如下:sectionname=ConnectionStringSectiontype=CustomConfig.Configrationner.ConnectionStringSection,CustomConfig/注:CustomConfig.Configrationner.ConnectionStringSection指的是:此section可解析的实体所存放的【完整的命名空间.类名】,CustomConfig指的是:此section所在的程序集(dll)的名称。2.0然后将ConnectionStringSection节点配置在configuration节点下即可,具体如下:二、配置调用ConfigrationSection的文件。1.0首先要访问这个自定义节点,需要通过类来配置,我们得首先定义一个父节点类,父节点类包含子节点集合,如下:namespaceCustomConfig.Configrationner{publicclassConnectionStringSection:ConfigurationSection{[ConfigurationProperty(Publish)]publicConnectionStringCollectionPublish{get{return(ConnectionStringCollection)this[Publish];}}[ConfigurationProperty(Develop)]publicConnectionStringCollectionDevelop{get{return(ConnectionStringCollection)this[Develop];}}[ConfigurationProperty(Test)]publicConnectionStringCollectionTest{get{return(ConnectionStringCollection)this[Test];}}}}2.0子节点集合再包含子节点元素,如下namespaceCustomConfig.Configrationner{publicclassConnectionStringCollection:ConfigurationElementCollection{protectedoverrideConfigurationElementCreateNewElement(){returnnewNameValueSettings();}protectedoverrideobjectGetElementKey(ConfigurationElementelement){return((NameValueSettings)element).Name;}//写一个索引器,方便的访问该集合中的元素。//如果不写,则只有foreach来访问。publicNameValueSettingsthis[intindex]{get{returnthis.BaseGet(index)asNameValueSettings;}}publicnewNameValueSettingsthis[stringkey]{get{returnthis.BaseGet(key)asNameValueSettings;}}}}3.0定义子节点元素类,如下namespaceCustomConfig.Configrationner{///summary///连接字符串类////summarypublicclassNameValueSettings:ConfigurationElement{[ConfigurationProperty(name,IsRequired=true)]publicstringName{get{returnthis[name].ToString();}set{this[name]=value;}}[ConfigurationProperty(connectionString,IsRequired=true)]publicstringConnectionString{get{returnthis[connectionString].ToString();}set{this[connectionString]=value;}}[ConfigurationProperty(providerName)]publicstringProviderName{get{returnthis[providerName].ToString();}set{this[providerName]=value;}}}}三、获取自定义配置里的值。1.0使用如下代码取得自定义的值://获取连接字符串节点ConnectionStringSectionconnectColl=(ConnectionStringSection)ConfigurationManager.GetSection(ConnectionStringSection);//设置开发连接字符串stringconnectionString=connectColl.Develop[ZaiBangEntities].ConnectionString.ToString();四、配置EntityFramework数据库连接(修改EntityFramework数据库连接为自定义字符串)。1.0定义EntityFramework初始化数据库连接的类:namespaceCustomConfig.Configrationner{publicclassConfigrationTools{#region自定义配置:数据库连接///summary///**************************************************************************************************************///注:(使用自定义数据库连接,需修改路径Entities.edmx/Entities.Context.cs下的构造文件)///由:publicEntities():base(name=Entities){}///改为:publicEntities():base(CustomConfig.Configrationner.ConfigrationTools.BuildConnection(),true){}///**************************************************************************************************************////summarypublicstaticEntityConnectionBuildConnection(){stringconnectionString=;//获取连接字符串节点ConnectionStringSectionconnectColl=(ConnectionStringSection)ConfigurationManager.GetSection(ConnectionStringSection);////设置发布连接字符串//connectionString=connectColl.Publish[ZaiBangEntities].ConnectionString.ToString();//设置开发连接字符串connectionString=connectColl.Develop[ZaiBangEntities].ConnectionString.ToString();MetadataWorkspaceworkspace=newMetadataWorkspace(newstring[]{res://*/},newAssembly[]{Assembly.GetExecutingAssembly()});SqlConnectionsqlConnection=newSqlConnection(connectionString);returnnewEntityConnection(workspace,sqlConnection);}#endregion}}2.0修改路径Entities.edmx/Entities.Context.cs下的构造文件由:publicZaiBangEntities():base(name=ZaiBangEntities){}改为:publicZaiBangEntities():base(CustomConfig.Configrationner.ConfigrationTools.BuildConnection(),true){}3.0需注意数据库连接字符串不能为EntityFramework格式的,而使用通用格式。如下正确:示例代码下载:CustomConfig.rar所有配置都放在此文件夹中