zoukankan      html  css  js  c++  java
  • Asp.net中Web项目使用EnterpriseLibrary5.0独立配置文件找不到问题

            前几天在做一个Web Project升级过程中遇到这个问题,项目使用了Enterprise Library 4.1,并且有独立的配置文件。升级到5.0版本时发现找不到这个配置文件。
    运行时将得到这样的Exception(这里我们定义配置文件为EntLib.config):

    The configuration file EntLib.config could not be found.


    解决方法有以下两种:

            一 引用Microsoft.Practices.EnterpriseLibrary.Common.Configuration.dll, 自定义Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource,重写Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSourceElement下的CreateSource方法:

        [Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ConfigurationElementType(typeof(FileConfigurationSourceElement))]
        public class FileConfigurationSource : Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource
        {
     
            public FileConfigurationSource(string configurationFilepath)
                : base(configurationFilepath)
            {
            }
        }
     
        public class FileConfigurationSourceElement : Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSourceElement
        {
            /// <summary>
            /// Returns a new <see cref="T:Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource"/> configured with the receiver's settings.
            /// </summary>
            /// <returns>A new configuration source.</returns>
            public override Microsoft.Practices.EnterpriseLibrary.Common.Configuration.IConfigurationSource CreateSource()
            {
                string configurationFilepath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, this.FilePath);
                return new FileConfigurationSource(configurationFilepath);
            }
        }

            在Web.config/App.config中使用:

       1:  <configuration>
       2:      <configSections>
       3:          <section name="enterpriseLibrary.ConfigurationSource" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ConfigurationSourceSection, Microsoft.Practices.EnterpriseLibrary.Common, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
       4:      </configSections>
       5:      <enterpriseLibrary.ConfigurationSource selectedSource="File-based Configuration Source"
       6:          parentSource="">
       7:          <sources>
       8:            <!--Customer-->  
       9:            <add name="File-based Configuration Source" type="EntLibWebApplication.FileConfigurationSource,EntLibWebApplication"
      10:                  filePath="EntLib.config" />
      11:              <add name="File-based Configuration Source2" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
      12:                  filePath="EntLib.config" />
      13:          </sources>
      14:      </enterpriseLibrary.ConfigurationSource>
      15:      <system.web>
      16:          <compilation debug="true" targetFramework="4.0" />
      17:      </system.web>
      18:   
      19:  </configuration>

          注意9,10行的关键配置节,使用了我们定义的FileConfigurationSource。下面那个是默认的,实际上可以不要了。

          方法二,找开Commn Library 的源代码,找到FileConfigurationSource.cs文件,修改下面这个方法为:

    private static string GetRootedCurrentConfigurationFile(string configurationFile) 
        { 
            if (string.IsNullOrEmpty(configurationFile)) 
                throw new ArgumentException(Resources.ExceptionStringNullOrEmpty, "configurationFile"); 
     
     
            string strPath = 
                Path.IsPathRooted(configurationFile) 
                ? configurationFile 
                : Path.Combine(AppDomain.CurrentDomain.BaseDirectory, configurationFile); 
     
            if (!File.Exists(strPath)) 
            { 
                throw new FileNotFoundException( 
                    string.Format( 
                        CultureInfo.CurrentCulture, 
                        Resources.ExceptionConfigurationLoadFileNotFound, 
                        configurationFile)); 
            } 
            return strPath; 
        } 

          这个方法不需要修改配置节。

          希望对您的开发有帮肋。


    作者:Petter Liu
    出处:http://www.cnblogs.com/wintersun/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    该文章也同时发布在我的独立博客中-Petter Liu Blog

  • 相关阅读:
    Alook搭配JS脚本完美食用
    分享小米刷机教程/线刷(工具支持小米华为一加)
    iPhone 无需越狱修改wx+zfb+qq步数
    如果SELECT语句中没有结果,则使用CASE返回字符串
    MSSQLServer 正在显示"正在还原...."
    C# 小技巧
    C#使用Select方法快速获取List集合集合中某个属性的所有值集合
    C#中使用Sum方法对List集合进行求和操作
    sql日期函数
    sql只根据某一字段去重,并保留其他字段
  • 原文地址:https://www.cnblogs.com/wintersun/p/1894751.html
Copyright © 2011-2022 走看看