[VS 2017] Razor Compilation CompilationFailedException

[VS 2017] Razor Compilation CompilationFailedException

Ola pessoALL,

Dando continuidade aos erros encontrados na migração para o VS 2017, hoje vamos falar de um outro erro comum na migração: Microsoft.AspNetCore.Mvc.Razor.Compilation.CompilationFailedException : One or more compilation failures ocurred.
Esse erro é mais comum em projetos de testes que fazem integração com um site/api asp.net core, acontece porque por padrão os arquivos *.deps não são copiados para o output nos projetos de testes.

[/jabaModeOn

Se voce deseja saber mais sobre testes de integração com .net core, Rodrigo Kono e eu gravamos um workshop completo abordando o tema. Esta bem completo, foram mais de 400 participantes e mais de 10 horas de conteúdo totalmente FREE. Para saber mais e assistir ao workshop click aqui

[/jabaModeOff

Erro razor

Solução - Configurar o projeto para copiar os arquivos *.deps

Confesso que esse erro deu um pouquinho mais de trabalho de achar a solução, depois de algumas tentativas e bastante procurar no SO e no GH, acabei achando essa issue:

https://github.com/aspnet/Hosting/issues/959#issuecomment-286351703

Vou reproduzir os passos aqui no post:

  • No seu projeto de testes adicione um novo arquivo chamado xunit.runner.json, com o seguinte conteudo:
{
  "shadowCopy": false
}
  • Depois edite seu arquivo .csproj e adicione o seguinte conteudo:
<!-- Solves Problem#1 (binding error) https://github.com/Microsoft/vstest/issues/428. -->
<PropertyGroup>
    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>

<!-- Solves Problem#2 (404 when executing service calls hosted in other assemblies) -->
<!-- https://github.com/Microsoft/vstest/issues/196.-->
<ItemGroup>
    <None Update="xunit.runner.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
</ItemGroup>
<!-- https://github.com/NuGet/Home/issues/4412. -->
<Target Name="CopyDepsFiles" AfterTargets="Build" Condition="'$(TargetFramework)'!=''">
    <ItemGroup>
        <DepsFilePaths Include="$([System.IO.Path]::ChangeExtension('%(_ResolvedProjectReferencePaths.FullPath)', '.deps.json'))" />
    </ItemGroup>

    <Copy SourceFiles="%(DepsFilePaths.FullPath)" DestinationFolder="$(OutputPath)" Condition="Exists('%(DepsFilePaths.FullPath)')" />
</Target>
  • Salve o arquivo e rode seus testes novamente.

Prontinho pessoALL, agora não teremos mais Microsoft.AspNetCore.Mvc.Razor.Compilation.CompilationFailedException : One or more compilation failures ocurred.
Espero ter ajudado, até a próxima.