allowDefinition = Erro ‘MachineToApplication’ ao publicar a partir do VS2010 (mas somente após uma compilation anterior)

Eu posso executar meu aplicativo Asp.Net MVC 2 sem um problema no meu computador local. Basta executar / depurar.

Mas se eu já o construí, não posso publicá-lo! Eu tenho que limpar a solução e publicá-lo novamente. Eu sei que isso não é crítico para o sistema, mas é realmente irritante. “One Click Publish” não é “Solução limpa e, em seguida, clique em um clique”

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 é algo a ver com o Web.Config na pasta Views, mas porque só depois de eu construir uma vez anteriormente. E só para notar, o aplicativo funciona bem depois de publicado.

    Eu tive o mesmo problema com meus aplicativos MVC. foi frustrante porque eu ainda queria que minhas exibições fossem verificadas, então eu não queria desativar o MvcBuildViews

    Felizmente me deparei com um post que me deu a resposta. mantenha o MvcBuildViews como true , então você pode adicionar a seguinte linha abaixo em seu arquivo de projeto:

    [SomeKnownLocationIHaveAccessTo] 

    E não deixe essa pasta 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 esse erro …

    Eu deletei tudo da minha pasta obj / Debug e consertei esse erro. Isso me permitiu sair no

     true 

    opção no meu arquivo de projeto (que vem a calhar com o modelo T4MVC T4).

    Edit: Isso pode ser alcançado muito mais fácil simplesmente usando o menu “Build” -> “Rebuild Solution” (porque o que a reconstrução realmente faz é limpar a pasta obj / Debug e depois construir a solução).

    Eu estou usando essa solução alternativa na página do MS Connect para esse erro. Ele limpa todos os arquivos obj e temp em seu projeto (todas as configurações) antes de executar o AspNetCompiler.

    Modifique o destino MvcBuildViews em seu arquivo de projeto para que ele dependa dos destinos que limpam os arquivos de empacotamento que o Visual Studio criou. Essas metas são incluídas em projetos de aplicativos da Web automaticamente.

    Todos os arquivos de empacotamento serão excluídos sempre que o destino MvcBuildViews for executado.

        

    Esse problema ocorre quando há saída de projeto da Web (web.config ou arquivos de publicação temporária modelados) na pasta obj. O compilador ASP.NET usado não é inteligente o suficiente para ignorar coisas na pasta obj, então, em vez disso, gera erros.

    Outra correção é para nuke a saída de publicação antes de chamar . Abra o seu .csproj e mude isto:

        

    para isso:

              

    Isso excluirá todos os web.configs em \ obj, assim como todas as pastas PackageTmp em \ obj.

    Se você estiver usando a publicação na Web, poderá definir MvcBuildViews=false e MvcBuildViews=false PrecompileBeforePublish=true , que pré- MvcBuildViews=false após a cópia para a pasta temporária (imediatamente antes da publicação / pacote).

    Observação: PrecompileBeforePublish só é suportado pela pilha “novo” pipeline de publicação na Web (VS2010 SP1 + SDK do Azure ou VS2012 RTM). Se você estiver usando o VS2010 RTM, precisará usar um dos methods alternativos.

    Em relação à solução por jrummell, a configuração:

    DependsOnTargets="CleanWebsitesPackage;CleanWebsitesPackageTempDir;CleanWebsitesTransformParametersFiles;"

    Ele funciona no VS 2010 , mas não no VS 2012 . Em 2012 você tem que 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

    Eu sei que isso foi respondido, mas eu só queria adicionar algo interessante que encontrei.

    Eu tinha definido o “MvcBuildViews” para false no projeto, excluí 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 true.

    Eu apaguei o arquivo “.csproj.user” e, em seguida, tudo funcionou.

    Portanto, certifique-se de que, caso esteja alterando o arquivo csproj, você também altere ou exclua o arquivo “.csproj.user”.

    Eu tive esse problema também, então eu criei um evento de pré-compilation nas propriedades do projeto para limpar os diretórios de saída ( ${projectPath}\bin,${projectPath}\obj\${ConfigurationName} ). Em outro projeto eu também estava recebendo esse erro, mesmo com o evento de limpeza no lugar. No segundo projeto, eu estava compilando as visualizações, conforme listado no arquivo de projeto:

     true 

    Eu mudei o verdadeiro para falso, e ele não mais se queixou desse erro, mas ainda correu corretamente. Não vou afirmar que sei exatamente o que estava causando o segundo erro, mas pelo menos me fez avançar por enquanto.

    O problema tem a ver com os arquivos intermediários, mas há outra solução que consiste em limpar esses arquivos intermediários antes de construir as visualizações.

    Esta solução foi incluída em algumas versões do VS, mas só posso dizer que tive o problema no VS 2013 Update 5. (Veja o “Cuidado” abaixo, pode ser corrigido nesta versão, mas não funciona apenas no meu particular caso não-padrão).

    Eu pedi emprestado a solução de Error: allowDefinition = ‘MachineToApplication’ além do nível de aplicativo no Visual Studio Connect.

    A solução consiste em include essas linhas no projeto de aplicativo da Web (arquivo .csproj ) que manipulam a exclusão dos arquivos intermediários de interrupção:

       <_enablecleanonbuildformvcviews Condition=" '$(_EnableCleanOnBuildForMvcViews)'=='' ">true    <_publishtempfoldernamestocleanup Include="Database;TransformWebConfig;CSAutoParameterize;InsertAdditionalCS;ProfileTransformWebConfig;Package;AspnetCompileMerge">        

    Cuidado: por alguma razão, provavelmente porque eu mesmo o incluí no projeto, meu alvo de compilation para construir as views foi chamado "BuildViews" , ao invés de "MvcBuildViews" , então eu tive que modificar o atributo BeforeTargets acordo. Eu também simplifiquei o alvo, removendo o PropertyGroup e simplificando a condição, assim:

        <_publishtempfoldernamestocleanup Include="Database;TransformWebConfig;CSAutoParameterize;InsertAdditionalCS;ProfileTransformWebConfig;Package;AspnetCompileMerge">        

    No meu caso eu vi que quando eu tenho MvcBuildViews e PrecompileDuringPublish como verdadeiros – foi o que estava causando esse problema.

    Então eu removi o PrecompileDuringPublish e essa solução funcionou para mim e eu não tenho enfrentado esse problema desde então.

    insira a descrição da imagem aqui