Не удалось загрузить тип поставщика пользовательского профиля
Я пишу небольшое консольное приложение на С#, которое ссылается на пользовательскую сборку, которая реализует собственный поставщик профилей .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, но эй...