2010-04-19 2 views
10

Я пишу небольшое консольное приложение на C#, которое ссылается на пользовательскую сборку, которая реализует пользовательский провайдер .net Profile. Я добавил следующие разделы в файл 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, культура = нейтральной, PublicKeyToken = b03f5f7f11d50a3a.

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

Любые идеи?

ответ

19

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

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

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

До:

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

После:

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

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

+0

Также объяснено здесь: http://forums.asp.net/post/3709675.aspx –

+1

+1 - Это помогло мне получить мои тесты NUnit. Everthing отлично работал при запуске моего приложения MVC4, но тесты модулей не срабатывали. Убедитесь, что это изменение включено в приложение.конфигурационный файл, на который ссылаются любые модульные тестовые модули. – Winger

0

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

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

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

+0

Пробовал оба предложения и еще не продвинулся вперед. Fuslogvw не дал мне никакой достойной информации, чтобы отследить проблему дальше. – Cragly

0

Ваше решение спасло мое сожаление * после того, как я ОТБЕЛИЛ ДНИ своего драгоценного времени, преследуя эту проблему. Как обычно, у меня есть ОТМЕНЕННЫЕ ДНИ, борясь с продуктами 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», но hey ho ...

Смежные вопросы