Posso executar meu aplicativo Asp.Net MVC 2 sem problemas no meu computador local. Basta executar / depurar.
Mas se eu já construí, não posso publicá-lo! Tenho que limpar a solução e publicá-la novamente. Eu sei que isso não é crítico para o sistema, mas é realmente irritante. "One Click Publish" não é "Clean solution and One Click Publish"
O erro exato é o seguinte:
Erro 11 É um erro usar uma seção registrada como allowDefinition = 'MachineToApplication' além do nível do aplicativo. Esse erro pode ser causado por um diretório virtual não estar configurado como um aplicativo no IIS.
Eu suspeito que seja algo a ver com o Web.Config na pasta Views, mas então por que só depois de construir uma vez anteriormente. E só para notar, o aplicativo funciona bem depois de publicado.
Respostas:
Eu tive o mesmo problema com meus aplicativos MVC. era frustrante porque eu ainda queria que minhas visualizações fossem verificadas, então não queria desligar MvcBuildViews
felizmente, encontrei um post que me deu a resposta. mantenha os MvcBuildViews como verdadeiros , então você pode adicionar a seguinte linha abaixo no seu arquivo de projeto:
E faça com que essa pasta não esteja na pasta do seu projeto. Funciona para mim. Não é uma solução perfeita, mas é boa no momento. Certifique-se de remover a pasta do pacote (localizada dentro da pasta obj \ Debug e / ou obj \ Release ) da pasta do projeto, caso contrário, você continuará recebendo o erro.
FWIW, MS sabe sobre este erro ...
fonte
\obj
caminho), NÃO MvcBuildViews. A diferença é sutil, mas significativa.Eu apaguei tudo da minha pasta obj / Debug e ele corrigiu este erro. Isso me permitiu sair no
opção no meu arquivo de projeto (que é útil com o modelo T4MVC T4).
Editar: Isso pode ser conseguido muito mais facilmente simplesmente usando o menu "Build" -> "Rebuild Solution" (porque o que o rebuild realmente faz é limpar a pasta obj / Debug e então construir a solução).
fonte
Estou usando essa solução alternativa na página do MS Connect para esse erro. Ele limpa todos os arquivos obj e temporários em seu projeto (todas as configurações) antes de executar o AspNetCompiler.
fonte
rmdir /S /Q "$(ProjectDir)\obj"
à seção de pós-compilação de acordo com o Microsoft Ticket resolveu o problema!Esse problema ocorre quando há saída de projeto da Web (web.config de modelo ou arquivos de publicação temporários) na pasta obj. O compilador ASP.NET usado não é inteligente o suficiente para ignorar coisas na pasta obj, então ele lança erros em seu lugar.
Outra correção é limpar a saída de publicação antes de chamar <AspNetCompiler>. Abra seu .csproj e altere isso:
para isso:
Isso excluirá todos os web.configs em \ obj, bem como todas as pastas PackageTmp em \ obj.
fonte
obj
pasta.<ItemGroup>
são inválidos, mas ignore isso - funciona de qualquer maneira.Se estiver usando a Publicação na Web, você pode definir
MvcBuildViews=false
ePrecompileBeforePublish=true
, que pré-compila após a cópia para a pasta temporária (imediatamente antes de publicar / empacotar).NOTA:
PrecompileBeforePublish
só é compatível com a pilha "nova" do Pipeline de publicação na Web (VS2010 SP1 + SDK do Azure ou VS2012 RTM). Se estiver usando VS2010 RTM, você precisará usar um dos métodos alternativos.fonte
Em relação à solução por jrummell, a configuração:
DependsOnTargets="CleanWebsitesPackage;CleanWebsitesPackageTempDir;CleanWebsitesTransformParametersFiles;"
Ele trabalha em VS 2010 , mas não em VS 2012 . Em 2012 você deve colocar:
DependsOnTargets="CleanWebsitesPackage;CleanWebsitesWPPAllFilesInSingleFolder;CleanWebPublishPipelineIntermediateOutput"
Fonte:
VS 2010: C: \ Arquivos de programas (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Web \ Microsoft.Web.Publishing.targets
VS 2012: C: \ Arquivos de programas (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web \ Microsoft.Web.Publishing.targets
fonte
Eu sei que isso foi respondido, mas eu só queria acrescentar algo interessante que achei.
Eu tinha definido o "MvcBuildViews" como falso no projeto, excluído todas as pastas bin e obj e ainda estava recebendo o erro. Descobri que havia um arquivo ".csproj.user" que ainda tinha "MvcBuildViews" definido como verdadeiro.
Excluí o arquivo ".csproj.user" e tudo funcionou.
Portanto, certifique-se de alterar o arquivo csproj, altere ou exclua também o arquivo ".csproj.user".
fonte
Eu também tive esse problema, então criei um evento de pré-construção nas propriedades do projeto para limpar os diretórios de saída (
${projectPath}\bin,${projectPath}\obj\${ConfigurationName}
). Em outro projeto, também estava recebendo esse erro, mesmo com o evento de limpeza no local. No segundo projeto, eu estava compilando as visualizações listadas no arquivo do projeto:Mudei de verdadeiro para falso, e ele não reclamava mais daquele erro, mas ainda funcionava corretamente. Não vou alegar que sei exatamente o que estava causando o segundo erro, mas pelo menos me fez seguir em frente por enquanto.
fonte
O problema tem a ver com os arquivos intermediários, mas existe outra solução que consiste em limpar esses arquivos intermediários antes de construir as visualizações.
Esta solução foi incluída em alguma versão do VS, mas só posso dizer que tive o problema no VS 2013 Atualização 5. (Veja a seção "Cuidado" abaixo, poderia ser corrigido nesta versão, mas não funcionando apenas no meu particular caso não padrão).
Peguei emprestada a solução de Error: allowDefinition = 'MachineToApplication' além do nível do aplicativo no Visual Studio Connect.
A solução consiste em incluir estas linhas no projeto de aplicação web (
.csproj
arquivo) que tratam da deleção dos arquivos intermediários offedning:Cuidado: por algum motivo, provavelmente porque eu mesmo o incluí no projeto, meu destino de construção para construir as visualizações foi nomeado
"BuildViews"
, em vez de"MvcBuildViews"
, então eu tive que modificar oBeforeTargets
atributo de acordo. Também simplifiquei o alvo, removendo oPropertyGroup
e simplificando a condição, assim:fonte
No meu caso, vi que quando tenho MvcBuildViews e PrecompileDuringPublish como verdadeiros - era o que estava causando esse problema.
Então eu removi o PrecompileDuringPublish e essa solução funcionou para mim e não enfrentei esse problema desde então.
fonte