Compilar exibições no asp.net MVC

558

Eu quero uma tarefa msbuild para compilar as visualizações para que eu possa ver se há erros de tempo de compilação no momento ... tempo de compilação. Alguma ideia?

John Oxley
fonte
1
Não sei qual é o mecanismo de visualização que você está usando, mas se estiver usando o Razor, verifique minha postagem no blog: <a href = " chrisvandesteeg.nl/2010/11/22/… your asp.net visualizações mvc Navalha em uma DLL separada </a> deve ser possível usar esse código para outros viewengines bem, mas não tenho feito e testado que ainda
Chris van de Steeg

Respostas:

154

Eu francamente recomendaria o pacote de pepitas RazorGenerator. Dessa forma, suas visualizações têm um .designer.csarquivo gerado quando você as salva e, além de obter erros de tempo de compilação para as visualizações, elas também são pré-compiladas no assembly (= aquecimento mais rápido) e o Resharper também fornece ajuda adicional.

Para usar isso, inclua o pacote de nuget RazorGenerator no projeto ASP.NET MVC e instale a extensão " Razor Generator " no item em Ferramentas → Extensões e atualizações .

Usamos isso e a sobrecarga por compilação com essa abordagem é muito menor. Além disso, eu provavelmente recomendaria o .NET Demon da RedGate, o que reduz ainda mais o impacto no tempo de compilação.

Espero que isto ajude.

Mirko
fonte
1
existe uma solução semelhante para VS2012?
Daniel
6
Lamentável que ele só suporta C # e VB.Net não
Ed Degagne
3
@zoidbergi RazorGenerator trabalha com o VS2012; ao usar RazorGenerator.Mvc e RazorGenerator.MsBuild: não há necessidade de extensão. Veja a entrada do blog em stacktoheap.com
Jeroen K
2
Isso pode ser usado para encontrar apenas erros - ou substitui o mecanismo de exibição ao implantar o aplicativo?
Niico 7/11
Instalei o pacote de nuget RazorGenerator e a extensão Razor Generator. Nada foi alterado no meu projeto. Nenhum arquivo .designer.cs apareceu. Eu uso o visual studio 2017.
Michael Samteladze
563

Do documento leia-me doc para RC1 (não indexado pelo google)

Etapa de pós-compilação do compilador ASP.NET

Atualmente, erros em um arquivo de exibição não são detectados até o tempo de execução. Para permitir a detecção desses erros no momento da compilação, os projetos do ASP.NET MVC agora incluem uma propriedade MvcBuildViews, que está desabilitada por padrão. Para habilitar essa propriedade, abra o arquivo do projeto e defina a propriedade MvcBuildViews como true, conforme mostrado no exemplo a seguir:

<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <MvcBuildViews>true</MvcBuildViews>
  </PropertyGroup>

Nota A ativação desse recurso adiciona alguma sobrecarga ao tempo de compilação.

Você pode atualizar os projetos criados com liberações anteriores do MVC para incluir a validação de visualizações em tempo de construção, executando as seguintes etapas:

  1. Abra o arquivo do projeto em um editor de texto.
  2. Adicione o seguinte elemento ao <PropertyGroup>elemento mais alto : <MvcBuildViews>true</MvcBuildViews>
  3. No final do arquivo do projeto, remova o comentário do <Target Name="AfterBuild">elemento e modifique-o para corresponder ao seguinte:
<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />
</Target>
JarrettV
fonte
27
Se isso não funcionar no seu projeto, verifique se não há um <MvcBuildViews> false </MvcBuildViews> em algum lugar do arquivo do projeto. Ele estava substituindo o novo elemento <MvcBuildViews> que eu adicionei sobre ele.
Adrian Grigore
3
@mxmissile: Scott Guthrie recomendou adicionar um projeto de implantação da Web à sua solução para obter esse tipo de suporte em projetos de aplicativos da Web: weblogs.asp.net/scottgu/archive/2006/09/22/…
Zhaph - Ben Duguid
6
Verifique se EnableUpdateable está definido como false, caso contrário as visualizações não serão pré-compiladas. <EnableUpdateable> false </ EnableUpdateable> <MvcBuildViews> true </ MvcBuildViews> ( devcarl.posterous.com/... )
Carl Hörberg
55
Por que, por que, por que ... não há atalho de teclado para criar com ou sem vistas? MS porque?
1111 dariol
2
Esta é a solução adicionada às ferramentas MVC. stackoverflow.com/a/2670792/878612
lko
50

Você pode usar aspnet_compiler para isso:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler -v /Virtual/Application/Path/Or/Path/In/IIS/Metabase -p C:\Path\To\Your\WebProject -f -errorstack C:\Where\To\Put\Compiled\Site

onde " / Virtual / Aplicativo / Caminho / Ou / Caminho / No / IIS / Metabase " é algo como isto: " / MyApp " ou " / lm / w3svc2 / 1 / root / "

Também há uma tarefa AspNetCompiler no MSDN, mostrando como integrar aspnet_compiler ao MSBuild:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="PrecompileWeb">
        <AspNetCompiler
            VirtualPath="/MyWebSite"
            PhysicalPath="c:\inetpub\wwwroot\MyWebSite\"
            TargetPath="c:\precompiledweb\MyWebSite\"
            Force="true"
            Debug="true"
        />
    </Target>
</Project>
maxnk
fonte
5
Está desatualizado, consulte um trecho do documento leia-me abaixo.
12119 JarrettV
1
A outra resposta descreve a tarefa do projeto em mais detalhes, mas a parte aspnet_compiler ainda está correta (e útil nos agentes de construção).
mlhDev
26

Além disso, se você usar o Resharper, poderá ativar o Solution Wide Analysis e ele detectará quaisquer erros do compilador que você possa ter nos arquivos aspx. Isso é o que fazemos...

bh213
fonte
4
É verdade que ele funciona para arquivos aspx, mas a análise de toda a solução não inclui arquivos ascx (controles de usuário)
mookid8000
3
Acredito que sim no R # 5, mas é um enorme recurso para grandes projetos (mesmo em minha máquina doméstica de 16 GB não vale a pena usar).
28810 Andrew Andrew
3
@Andrew / @ mookid8000 - R # também detectará erros que o compilador não detectará, como exibições e ações ausentes / incorretas. O R # desacelera um pouco o seu PC (acho ótimo em um projeto amplo com 4 GB de RAM e uma CPU com hyperthread), mas recupero facilmente o tempo que gasto esperando por ele e acabo fazendo menos operações no meu computador. O código como R # fornece operações de nível superior que agrupam as várias etapas que eu precisaria executar para realizar a mesma tarefa manualmente. Seu projeto deve ser enorme!
Drew Noakes
5
Para projetos grandes, "diminua a velocidade do seu PC" é um eufemismo. Minha máquina de compilação tem 16 GB de RAM e 8 núcleos (2 Xeons), e apenas CRAWLS. No entanto, tenho a sensação de que o R # não foi feito para projetos do nosso tamanho ... por exemplo, nossa solução tem ~ 30 projetos, alguns milhões de LOC e muitas centenas de visualizações. Adoro R # em nossos projetos menores (por exemplo, alguns projetos e não mais que 50 visualizações), mas em nosso grande projeto sempre precisamos desativá-lo.
Beep beep
1
Isso pode funcionar, mas corra! Ativei isso pensando que minha solução era pequena e nunca terminou de "analisar" e consumiu toda a minha RAM e CPU. Levei 15 minutos para me recuperar.
emragins
11

A próxima versão do ASP.NET MVC (disponível em janeiro mais ou menos) deve ter a tarefa MSBuild que compila visualizações, portanto, você pode esperar.

Ver anúncio

bh213
fonte
6

A resposta dada aqui funciona para algumas versões do MVC, mas não para outras.

A solução simples funcionou para o MVC1, mas na atualização para o MVC2 as visualizações não estavam mais sendo compiladas. Isso ocorreu devido a um erro nos arquivos de projeto do site. Veja este artigo haacked.

Veja isto: http://haacked.com/archive/2011/05/09/compiling-mvc-views-in-a-build-environment.aspx

user1040323
fonte
6

Compilar> Executar análise de código

Tecla de atalho: Alt+F11

Ajudou-me a detectar erros do Razor.

Abu Abdullah
fonte
2
Votei positivamente nesta resposta porque a tecla de atalho realmente expôs um erro do Razor. No entanto, notei posteriormente que ele parece funcionar apenas se você tiver o arquivo .cshtml aberto no IDE.
precisa saber é o seguinte
1

Usar a extensão Ferramentas de Produtividade do Visual Studio ( gratuita ) ajuda um pouco . Especificamente, o Solution Error Visualizerrecurso. Com ele, erros de compilação marcados visualmente no gerenciador de soluções (no arquivo de origem em que o erro foi encontrado). Por alguma razão, no entanto, esse recurso não funciona como outros erros em qualquer outro lugar do código.

Nas exibições do MVC, quaisquer erros em tempo de compilação ainda serão sublinhados em vermelho em seus respectivos arquivos .cs, mas a sinalização desses erros não é propagada para cima no Solution Explorer (de maneira alguma, mesmo que não no arquivo de origem).

Obrigado por BlueCloudscorrigir minha declaração anterior.

Acabei de relatar isso como um problema no projeto github da extensão.

Veverke
fonte
1
Eu tentei Productivity Power Tools. Mas não se comporta como o que é dito aqui. Há um erro na visualização do barbeador, mas a compilação é um sucesso. as visualizações não são marcadas ou sublinhadas em vermelho ou em qualquer lugar da árvore do Solution Explorer.
Blue Clouds
2
@BlueClouds: você está certo. Criei um projeto de amostra e adicionei um erro em tempo de compilação em uma exibição. A extensão sublinhará as linhas com erro em vermelho, mas não propagará o erro no explorador de soluções. Estou corrigindo o que afirmei na resposta. Estou deixando a resposta aqui, pois ainda ajuda um pouco, sem, na verdade, resolver o problema de maneira eficaz.
Veverke