记录一个IIS的服务器错误问题的解决方案
部署一个mvc项目到iis的时候提示有下面这样的错误,
看提示是Microsoft.CodeDom.Providers.DotNetCompilerPlatform
,权限问题。
我是第一次遇到,所以只能搜索,显示在中文网站上搜索,发现基本上都是垃圾信息,很多人不验证一下就直接把别人的总结转载了,看似有很多信息,其实最后归源都是一个人写的。
用英文搜索,在stackoverflow(神网站)上看到一篇问答的,提问者遇到的问题和我是类似的。
[https://stackoverflow.com/questions/33319675/the-codedom-provider-type-microsoft-codedom-providers-dotnetcompilerplatform-cs](https://stackoverflow.com/questions/33319675/the-codedom-provider-type-microsoft-codedom-providers-dotnetcompilerplatform-cs]
第一名的答案大致意思就是这是mvc模版默认引入nuget的roslyn库造成的,所以去除掉相关的引用就可以了,我试了一下,确实就可以运行了。
但是这个解决方案总感觉不对劲,不是再从根本上解决问题,而是在回避问题。 微软默认引入roslyn的库说明这是是可以用的,现在不能用从提示上看是权限问题,那就应该是权限问题了。
继续搜索,看到了这篇文章
介绍的是roslyn编译器在asp.net中的应用。
回过头去看stackoverflow的那个回答,发现底下有个低赞的回答提到了要添加IIS_IUSRS
,我尝试了一下,果然OK了,看来就是权限问题了。
顺便研究了一下IIS权限,即对对应文件夹的权限。
有两个权限比较重要,匿名用户IUSR和和用户组IIS_IUSRS,
其中IUSR认证的时候不需要密码,匿名;
而IIS_IUSRS能够让AppPool拥有访问系统资源的足够权限,所有在这个用户组里的用户都可以。