Хорошо, я много читал и экспериментировал на эту тему, и я думаю, что собрал и скомпилировал достаточно информации, чтобы помочь тем, кто может наткнуться на эту тему при поиске этой ошибки. Что я сделаю, так это просто предложу разговорное объяснение, за которым последуют несколько ссылок на очень актуальную информацию.
Существуют две различные методологии веб-дизайна, поддерживаемые Visual Studio; веб-приложения и веб-сайты. Это относится и к 2005, 2008 и 2010 гг. Такое разделение принципов проектирования, по-видимому, обусловлено тем фактом, что Visual Studio 2003 поддерживала только модель веб-приложения, и эта модель была изменена с выпуском Visual Studio 2005, а затем, чтобы Чтобы совместить принципы проектирования с предыдущими версиями, в Visual Studio 2005 была добавлена методология веб-приложений, что создало очень запутанный путь для разработчиков, очевидно, даже с уважаемыми уровнями квалификации.
Я не буду вдаваться в подробности различий между двумя моделями. Есть много деталей в ссылках внизу этого поста. Но достаточно сказать, что профили НЕ поддерживаются сразу после установки, используя функциональность веб-приложения.
Кроме того, чтобы еще больше сбить с толку, и это меня смутило, профили не будут работать с моделью веб-сайта, если сайт публикуется с помощью параметра меню Build -> Publish Web Site, если (возможно, сначала он предварительно компилируется вручную, а затем предварительно скомпилированные dll копируются через «сайт копирования» или FTP, или как вы используете. Предварительная компиляция, по-видимому, выполняется через командную строку. У меня есть ссылка с инструкциями о том, как это сделать ниже. Но опять же, я сам не проверял это, поэтому не знаю, поможет ли это.
Причина, по которой профили не работают с методом развертывания Build -> Publish Web Site, заключается в том, что класс ProfileCommon создается динамически со свойствами профиля, которые вы определяете в веб-конфигурации, когда IIS динамически компилирует вашу страницу при первом запуске. Доступ Если вы используете опцию «build -> publish web site», он прекрасно компилирует ваши DLL, но не создает этот класс для вас.
Честно говоря, я не уверен, почему опция Build -> Publish Web Site в первую очередь включена в модель сайта. Исходя из всего, что я прочитал, суть модели «Веб-сайт против веб-приложения» заключается в том, чтобы сделать интерфейс ASP.net более похожим на традиционный опыт веб-разработки, где ваши файлы могут быть отредактированы на вашем компьютере и переданы по FTP на сервер или могут просто отредактируйте на сервере. Да, они должны быть скомпилированы до того, как к ним будет получен доступ, но эта компиляция, по замыслу, происходит динамически, и, по-видимому, если вы сначала компилируете сайт, а затем загружаете его, вы компилируете его без динамического создания класса ProfileCommon и, следовательно, эффективно убираете один из них. отличных особенностей подхода asp.net к дизайну сайтов.
Существует ряд сообщений, в которых люди выражают озабоченность по поводу безопасности своего кода, потому что использование модели веб-сайта и копирование их файлов на сервер для динамической компиляции означает, что файлы с исходным кодом находятся на сервере в предварительно скомпилированном виде. государство. Однако я просто не вижу разницы между этим и любым другим более традиционным языком веб-сценариев, таким как Perl, PHP или даже классический ASP. На этих языках код находится так же уязвимо. Любой код уязвим на неверно настроенном сервере. Более того, даже если ваш код скомпилирован, хакер, способный обойти безопасность хорошо сконфигурированного сервера IIS и получить доступ к исходным файлам, может также получить доступ к вашим скомпилированным файлам, а затем просто запустить их через ILDASM. Так что, если они не профессионально запутаны, какая разница?
Итак, из того, что яЕсли вы хотите использовать профили на своем веб-сайте asp.net, создайте свой сайт как проект веб-сайта против проекта веб-приложения и скопируйте его на свой сервер вместо публикации через меню сборки.Возможно, вы сможете предварительно скомпилировать его, а затем опубликовать (не уверен насчет этого), но я знаю, что простое копирование и возможность динамической компиляции работает.
Если я что-то упустил и есть другой способЯ хотел бы прочитать об этом.Между тем вот несколько невероятно полезных ссылок.Огромное спасибо 5arx за настройку моего пути:
http://www.codersbarn.com/post/2008/06/ASPNET-Web-Site-versus-Web-Application-Project.aspx
http://msdn.microsoft.com/en-us/library/dd547590.aspx
http://msdn.microsoft.com/en-us/library/ms227972.aspx