企业库5:如何配置相对于asp.net Web应用程序文件夹的FileConfigurationSource?

时间:2010-06-30 15:39:41

标签: asp.net configuration enterprise-library

我的验证配置存储在我的Business Object项目的validation.config中。如果更新

,配置文件将设置为复制

业务对象项目由我的Web项目引用,因此,validation.config将复制到我的Web应用程序的bin文件夹中。

在我的web.config中,我重定向了验证配置:

<enterpriseLibrary.ConfigurationSource selectedSource="System Configuration Source">
<sources>
  <add name="System Configuration Source" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.SystemConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  <add name="ValidationConfigurationSource" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
    filePath="bin\validation.config" />
</sources>
<redirectSections>
  <add sourceName="ValidationConfigurationSource" name="validation" />
</redirectSections>

但是,使用procmon我可以看到它正在尝试从C:\ WINDOWS \ system32 \ bin \ validation.config加载配置

FileConfigurationSource的源代码中似乎没有关于使用AppDomain.CurrentDomain.BaseDirectory创建路径的内容,因此我不确定相对路径如何与asp.net一起使用

如何让它适用于ASP.NET应用程序?

我使用在调试模式下启动的本地IIS服务器在XP上运行。

修改

很抱歉,刚刚意识到有两个未解决的问题:

http://entlib.codeplex.com/workitem/26990

http://entlib.codeplex.com/workitem/26760

如果我想出一个解决方法,我会在这里发帖。

1 个答案:

答案 0 :(得分:1)

要修复Microsoft Enterprise 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;
    }