Не удалось загрузить тип поставщика пользовательского профиля

Я пишу небольшое консольное приложение на С#, которое ссылается на пользовательскую сборку, которая реализует собственный поставщик профилей .net. Я добавил следующие разделы в файл app.config, который ссылается на пользовательский класс и сборку.

<system.web>
<profile defaultProvider="MyCompanyProfileProvider" inherits="MyCompany.Web.User.GenericProfile" automaticSaveEnabled="false">
    <providers>
        <clear/>
        <add name="MyCompanyProfileProvider" connectionStringName="defaultDatabase" applicationName="/myApplication" type="MyCompany.Web.ProfileProvider, MyCompany.Web"/>
    </providers>
    <properties>
        <add name="JobRoleId" type="System.Int32"/>
        <add name="LastCompetencyId" type="System.Int32" defaultValue="0"/>
        <add name="MixSettings" type="System.Xml.XmlDocument"/>
    </properties>
</profile></system.web>

Однако, когда я запускаю приложение в режиме отладки, я получаю следующую ошибку, как если бы она просматривалась в сборке System.Web, а не в файле app.config.

Не удалось загрузить тип 'MyCompany.Web.User.GenericProfile' из сборки 'System.Web, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a'.

У меня есть локальное веб-приложение, которое также использует сборщик и пользовательский поставщик профилей, и это работает без проблем. Я проверил, что ссылочная сборка копируется в выходной каталог.

Любые идеи?

Ответ 1

Наконец-то я нашел ответ на этот вопрос, и это было так просто! (Он говорит после нескольких часов поиска и отладки).

Мне просто нужно было прямо сказать, в какой сборке находился мой пользовательский поставщик. Я думал, что мне нужно было это делать только при указании типа при добавлении провайдера.

Однако при определении вашего профиля в атрибуте inherits необходимо определить. Например:

До:

<profile defaultProvider="MyCompanyProfileProvider"
         inherits="MyCompany.Web.User.GenericProfile"
         automaticSaveEnabled="false">

После:

<profile defaultProvider="MyCompanyProfileProvider" 
         inherits="MyCompany.Web.User.GenericProfile, MyCompany.Web" 
         automaticSaveEnabled="false">

Надеюсь, это поможет кому-то еще в будущем с той же проблемой.

Ответ 2

Попробуйте удалить дополнительное пространство за запятой, где вы указываете свой класс и сборку, но я не думаю, что это исправит.

Ваше приложение просматривает ваш пользовательский класс в сборке System.Web, что очень странно.

Я бы использовал fuslogvw, чтобы получить более подробную информацию о сбое.

Ответ 3

Ваше решение спасло мое извинение * после того, как я ОТКЛЮЧАЛ ДНИ моего драгоценного времени, преследуя эту проблему. Как обычно, у меня есть ОТМЕНЕННЫЕ ДНИ, борясь с продуктами Microsoft, а не с реальными ИТ-проблемами, которые мне нужно решать сами. Мои строки App.Config теперь выглядят так, и кажется, что они работают нормально:

<profile defaultProvider="DefaultProfileProvider" inherits="SmartTariffs_V13.ProfileCommon, SmartTariffs_V13">
  <providers>
    <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
  </providers>
</profile>

Где SmartTariffs_V13 - это имя проекта и SmartTariffs_V13.ProfileCommon - это имя файла .cs в этом проекте. Я нашел, что это работает без добавления вашего тега automaticSaveEnabled, но эй...