VS 2015,C#6,MVC5,Roslyn - 502网关和Azure Web应用程序上的编译错误

时间:2016-10-27 00:58:55

标签: asp.net-mvc azure visual-studio-2015 azure-web-sites roslyn

我有一个与此非常相似的问题:VS 2015, C# 6, MVC5, Roslyn -- 502 gateway errors on Azure web app 所以请不要将其标记为副本。

我的情况与之前的问题完全一样:VS 2015,C#6,MVC5,Roslyn,网站错误的网站速度非常慢,CodeDOM编译器Nuget包,带有git持续部署的Azure Web App。另外,我收到这样的编译错误:

' /'中的服务器错误应用

编译错误 描述:编译服务此请求所需的资源时发生错误。请查看以下特定错误详细信息并相应地修改源代码。

编译器错误消息:编译器失败,错误代码为-532462766。

显示详细的编译器输出:

D:\ Windows \ system32> D:\ home \ site \ wwwroot \ bin \ roslyn \ csc.exe / t:library / utf8output / nostdlib + / R:" D:\ Windows \ Microsoft.NET \框架\ v4.0.30319 \ mscorlib.dll中" /R:"D:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Runtime\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Runtime.dll" 大约四页。

我尝试使用Kudu删除obj和bin文件夹。这似乎解决了一段时间,直到我去某个页面并且问题重新开始。

我真的不想降级到C#5,因为我喜欢使用nameof。请帮忙。

编辑:我发现它只是在视图中使用C#6等功能,例如导致问题的视图中的名称,项目的其余部分正在使用C#6。我卸载了CodeDOM包并还原了一切,一切正常。但我真的希望C#6在视图中工作。

1 个答案:

答案 0 :(得分:1)

CodeDom包的问题是将roslyn二进制文件复制到应用程序的\ bin文件夹中,并尝试从那里执行csc.exe,但它没有权限这样做。

对此的正确解决方案是在将视图部署到服务器之前预编译视图。有许多关于如何做到这一点的现有指南。要运行StackOverflow,我们使用StackExchange.Precompilation

除了支持预编译外,它还包括一个自定义视图引擎,它使用roslyn在应用程序本身内编译内存中的视图,而不是调用另一个进程(csc.exe)来执行此操作。