Корпоративная библиотека 5: Как настроить FileConfigurationSource относительно папки веб-приложения asp.net? - PullRequest
1 голос
/ 30 июня 2010

Моя конфигурация проверки сохранена в validation.config в моем проекте Business Object. Файл конфигурации настроен на копирование, если новее

Мой бизнес-проект ссылается на проект бизнес-объекта, поэтому validation.config копирует в папку 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?

Я работаю на XP с использованием локального сервера IIS, запускаемого в режиме отладки.

Редактировать

Извините, только что понял, что для этого подано два открытых вопроса:

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

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

Если я найду обходной путь, я опубликую здесь.

1 Ответ

1 голос
/ 20 июля 2010

Чтобы исправить код в источнике 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;
    }
...