ASP.NET: Este método não pode ser chamado durante o estágio de inicialização do aplicativo antes do início

135

Estou tentando obter um site do ASP.NET MVC 3 em execução no IIS 6.0.

Atualmente, quando solicito uma página do servidor, ocorre o seguinte erro:

Mensagem de erro do analisador: Este método não pode ser chamado durante o estágio de inicialização do aplicativo antes do início.

nesta linha:

<add name="MyMembershipProvider" type="NS.MyMembershipProvider" connectionStringName="MyDatabase" applicationName="/MySite"/>

Estou completamente perplexo e não tenho muita idéia sobre o ciclo de vida do aplicativo ASP.NET, sem falar nas diferenças entre 6.0 e 7.0. Ler as páginas do MSDN não pareceu ajudar muito.

Alguém tem algum insight ou bons links para investigação? :)

sqwerty
fonte
1
Eu tenho o mesmo problema com o MVC 2 no servidor local VS do host local (Cassini).
Morten Christiansen
1
Esse mesmo problema (e resolução) parece ser aplicável ao MVC 3 no IIS 7.0 também.
CrazyPyro
2
Também tem esse problema com o MVC4 e o IIS6, com um novo projeto. Corrigido com a remoção do webmatrix. *, Veja a resposta abaixo.
Andrew Backer
Eu tive o mesmo erro, mas não no contexto de um provedor de associação, portanto a resposta aceita não ajudou. Acontece que eu cometi um erro estúpido, não especificando a montagem na seção de configuração. Alterei o nome da seção para "Fully.qualified.name.of.type, assembly.name" para limpar o erro.
usar o seguinte código

Respostas:

253

Adicione isso no seu web.config (na seção appSettings):

<add key="enableSimpleMembership" value="false"/>
<add key="autoFormsAuthentication" value="false"/>

EDITAR:

Para quem pergunta por que, é um problema conhecido descrito nas notas de versão do mvc 3 Mais detalhes aqui

Gregoire
fonte
3
Você pode expandir um pouco isso? Onde no web.config? O que as chaves fazem? Estou tendo problemas para encontrar documentação online dessas chaves.
19411 Kennet Belenky
2
Entendo. Ele define automaticamente regras de segurança e associação para que você tenha que substituí-las antes de adicionar regras personalizadas. Complicado.
Jonathan Allen
4
Eu crio um novo projeto, esse erro não ocorre e não preciso adicionar essas chaves. No meu projeto existente, tive que adicionar essas chaves ao trabalho, por quê?
Ridermansb
2
Por quê? Alguém pode linkar para alguma explicação / documentação?
274128 Matt Kocaj #
1
A primeira linha fixa-lo para mim em MVC4: <key add = valor "enableSimpleMembership" = "false" />
angularsen
39

Depois de atualizar alguns dos meus aplicativos do ASP.NET MVC3 para o MVC4, eu estava recebendo esse erro. Foi o resultado dos assemblies WebMatrix (WebMatrix.WebData.dll e WebMatrix.Data.dll). Eu removi essas referências e assemblies do diretório / bin e que cuidavam do problema.

Justin Helgerson
fonte
2
@rboarman - Isso corrigiu isso para mim repetidamente. Você tem certeza de que os assemblies ainda não estão no diretório / bin?
23612 Justin Helgerson #
A adição da chave conforme descrito acima a corrigiu. A presença de WebMatrix.WebData.dll e WebMatrix.Data.dll não fez diferença de qualquer maneira.
rboarman
Isso foi corrigido quando eu atualizei do MVC4RC para o RTM. Comecei fazendo um novo projeto e copiando todos os bits relacionados. Não fiz alterações no código e o web.config também não teve alterações significativas. Estranho.
Andrew Backer
1
Corrigido para mim. Eu estava em uma situação em que instalei algumas coisas para o Azure, construí o projeto, decidi que não era o que eu queria e fiz o desfazer por meio do TFS; portanto, todo o meu código era idêntico ao que era quando estava trabalhando. No entanto, minha pasta bin estava um pouco mais pesada. A limpeza manual dos assemblies do WebMatrix (em vez de chamar Clean no projeto) funcionou. Obrigado Ek0nomik.
Yetti 6/12/12
Obrigado. Isso consertou para mim.
Corix010
8

@ Ek0nomik está certo. Migramos do MembershipProvidernovo para o novo, ExtendedMembershipProviderpermitindo tirar proveito de algumas das novas funcionalidades oferecidas no namespace WebMatrix . Por padrão, a Associação Simples está ativada por algum motivo, então tivemos que desativá-la explicitamente, pois não queríamos ir tão longe quanto usar o SimpleMembershipProvider.

Tudo o que precisamos fazer foi adicionar isso ao web.config:

<add key="enableSimpleMembership" value="false"/>

A habilitação da associação simples fez com que o código de inicialização do provedor fosse executado antes do manipulador Application_Start. Nossa estrutura de aplicativos exige que App_Start seja a primeira coisa a ser executada. Pessoalmente, eu sempre esperaria isso, mas a Associação Simples altera esse comportamento. Cuidado.

Andy McCluggage
fonte
6

Bem, acabei de receber esse erro e ele resultou de uma cópia acidental de um .cshtml na raiz do meu projeto. Nem foi incluído no projeto. Excluiu isso e o erro desapareceu. Isso foi com o MVC3 no IIS7. Eu imagino que algumas das pessoas que estão com esse problema estão no mesmo barco.

David Hammond
fonte
2

Isso é causado por várias chamadas de Reflexão serem feitas muito cedo em um Aplicativo. Acontece que as sugestões Web.Config em outras respostas impediram que uma dessas chamadas de Reflexão fosse feita. No meu caso, no entanto:

Estou usando o Entity Framework e executei update-database. Eu tenho:

Este método não pode ser chamado durante a fase de inicialização do aplicativo antes do início.

Acontece que tínhamos código que usava uma biblioteca que foi modificada recentemente para obter todo o código em todos os namespaces / projetos. Especificamente, ele chamou:

System.Web.Compilation.BuildManager.GetReferencedAssemblies()

Kaboom. Isso causou esse erro obscuro. As migrações EF são executadas em uma zona estranha, onde o aplicativo está meio em execução e meio não, o que significa que o método acima nunca pode ser chamado por qualquer código que as migrações invocem.

Chris Moschini
fonte