Carregar uma exibição incorporada em uma biblioteca de classes no Azure causa uma exceção sobre os pacotes de bibliotecas de compilação ausentes no namespace System.*
ou Microsoft.*
.
Exceção.
Criei um repositório básico para reproduzir o problema. Eu criei um aplicativo e uma biblioteca através do VS e fiz o mínimo possível para obter uma visualização incorporada na biblioteca e exibi-la parcialmente na página inicial. Deve funcionar bem se for clonado e executado no VS, mas falhará se for implantado no Azure.
https://github.com/svallis/ClassViews
Parcial renderizado corretamente.
Implantado para azure o repositório de teste lança a seguinte exceção na página inicial:
InvalidOperationException: Can not find compilation library location for package 'microsoft.codeanalysis.common'
Microsoft.Extensions.DependencyModel.CompilationLibrary.ResolveReferencePaths()
Navegar para a página /Home/About
sem uma parte parcial incorporada funciona corretamente.
Em meu projeto completo, estava recebendo o mesmo erro, mas com um pacote diferente:
Can not find compilation library location for package 'system.data.sqlclient'
Alguém é capaz de fornecer alguma ideia sobre isso? Presumi que fosse mais provável encontrar uma resposta aqui do que passar pelo suporte do Azure, mas fico feliz em aceitar qualquer sugestão. O mesmo código implantado em um contêiner docker fornecido pela MS funciona perfeitamente, assim como no desenvolvimento, então parece que é algo na forma como o Azure está configurado.
/ cc @pranavkm
MvcRazorCompileOnPublish
desativa a publicação de refs
assemblies destinados à compilação em tempo de execução. A ideia é que, como seu aplicativo tem visualizações pré-compiladas, você não precisaria dos refs para a compilação em tempo de execução. No entanto, suas visualizações incorporadas exigem isso. Existem duas maneiras de consertar isso
<MvcRazorExcludeRefAssembliesFromPublish>false</MvcRazorExcludeRefAssembliesFromPublish>
em seu csproj. Isso deve continuar publicando o diretório refs
como parte da saída de publicação.Isso faz todo o sentido @pranavkm - muito obrigado pela explicação. Eu segui sua sugestão anterior por enquanto, vou adiar a pré-compilação das visualizações na biblioteca de classe até que esteja um pouco mais simplificada (presumo que, eventualmente, deve ser tão fácil quanto habilitar no aplicativo, basta virar um bool no csproj?)
Comentários muito úteis
MvcRazorCompileOnPublish
desativa a publicação derefs
assemblies destinados à compilação em tempo de execução. A ideia é que, como seu aplicativo tem visualizações pré-compiladas, você não precisaria dos refs para a compilação em tempo de execução. No entanto, suas visualizações incorporadas exigem isso. Existem duas maneiras de consertar isso<MvcRazorExcludeRefAssembliesFromPublish>false</MvcRazorExcludeRefAssembliesFromPublish>
em seu csproj. Isso deve continuar publicando o diretóriorefs
como parte da saída de publicação.