Не удалось загрузить файл или сборку при попытке создать пользовательский раздел конфигурации в веб-конфигурации

Я пытаюсь создать свой собственный раздел конфигурации со следующим:

Код в файле web.config:

<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <section name="customConfigurationSection" type="CustomConfigurationSectionRepro.ConfigHandlers.CustomConfigurationSection" allowLocation="true" allowDefinition="Everywhere" />
  </configSections>

<customConfigurationSection fileName="\Configs\customconfig.config" />
....
....
</configuration>

Код в файле обработчика пользовательских настроек:

namespace CustomConfigurationSectionRepro.ConfigHandlers
{
    public class CustomConfigurationSection : ConfigurationSection
    {
        [ConfigurationProperty("fileName", IsRequired = false)]
        public string FileName
        {
            get
            {
                return (string)this["fileName"];
            }
            set
            {
                this["fileName"] = value;
            }
        }
    }
}

Мое веб-приложение - это просто стандартное веб-приложение mvc из шаблона Visual Studio MCV. Когда я запускаю его в среде разработки с IIS Express, я получаю сообщение об ошибке.

Could not load file or assembly 'CustomConfigurationSectionRepro' or one of its dependencies. An attempt was made to load a program with an incorrect format.

=== Pre-bind state information ===
LOG: DisplayName = CustomConfigurationSectionRepro
(Partial)
WRN: Partial binding information was supplied for an assembly:
WRN: Assembly Name: CustomConfigurationSectionRepro | Domain ID: 2
WRN: A partial bind occurs when only part of the assembly display name is provided.
WRN: This might result in the binder loading an incorrect assembly.
WRN: It is recommended to provide a fully specified textual identity for the assembly,
WRN: that consists of the simple name, version, culture, and public key token.
WRN: See whitepaper http://go.microsoft.com/fwlink/?LinkId=109270 for more     information and common solutions to this issue.
LOG: Appbase = file:///C:/Users/vtran/Documents/Visual Studio 2015/Projects/Playground/CustomConfigurationSectionRepro/
LOG: Initial PrivatePath = C:\Users\vtran\Documents\Visual Studio 2015\Projects\Playground\CustomConfigurationSectionRepro\bin
Calling assembly : (Unknown).

Я искал вокруг, но не мог найти решение. Пространство имен и имя сборки кажутся правильными. CustomConfigurationSectionRepro.dll также существует в папке bin.

Любая помощь могла бы быть полезна.

ОБНОВЛЕНИЕ: если я изменю хост-сервер с IIS Express на локальный IIS, приложение будет работать нормально. Я до сих пор не понимаю, почему.

2 ответа

Я думаю, что это должно быть в форме

<section name="customConfigurationSection" type="CustomConfigurationSectionRepro.ConfigHandlers.CustomConfigurationSection, CustomConfigurationSectionRepro" allowLocation="true" allowDefinition="Everywhere" />

используя запятую и имя DLL после имени класса.

Похоже, configSection запись в вашем web.config должна быть квалифицирована для сборки.

<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <section name="customConfigurationSection" type="CustomConfigurationSectionRepro.ConfigHandlers.CustomConfigurationSection" allowLocation="true" allowDefinition="Everywhere" />
  </configSections>

Линия для type необходимо указать сборку с запятой и именем сборки после имени типа, например:

CustomConfigurationSectionRepro.ConfigHandlers.CustomConfigurationSection, CustomConfigurationSectionRepro

Сделаем ваш элемент конфигурации похожим на это:

<section name="customConfigurationSection" type="CustomConfigurationSectionRepro.ConfigHandlers.CustomConfigurationSection, CustomConfigurationSectionRepro" allowLocation="true" allowDefinition="Everywhere" />
Другие вопросы по тегам