VS2019 ASP.NET模板项目开发环境正常,生产服务器运行报错
解决ASP.NET中等信任环境下CodeDom提供程序找不到的问题
问题根源
Visual Studio 2019创建的ASP.NET Web应用默认引用了Microsoft.CodeDom.Providers.DotNetCompilerPlatform包,用来支持C# 6及以上语法特性,但这个包的组件在中等信任级别服务器上要么未部署到位,要么因权限限制无法加载;再加上服务器.NET运行环境版本与开发环境依赖不匹配,就触发了找不到CodeDom类型的错误。
可行解决办法
1. 部署缺失的CodeDom组件到服务器bin目录
- 在开发项目中确认
Microsoft.CodeDom.Providers.DotNetCompilerPlatform和Microsoft.Net.Compilers两个NuGet包已安装,右键这两个引用,将「复制本地」设置为True,确保发布时文件会被打包。 - 重新发布项目,检查服务器站点的
bin目录,需包含以下内容:Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll(对应报错的3.6.0.0版本)Microsoft.Net.Compilers.dllroslyn文件夹(内含编译器工具集)
2. 切换为.NET内置的CodeDom提供程序
如果项目未使用C# 6+新语法(如字符串插值、空值运算符等),直接修改web.config即可:
- 找到web.config第55行附近的
<compilers>配置块,替换为以下代码:
<compilers> <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4"> <providerOption name="CompilerVersion" value="v4.0"/> <providerOption name="WarnAsError" value="false"/> </compiler> </compilers>
- 同时删除web.config中关于
Microsoft.CodeDom.Providers.DotNetCompilerPlatform的<dependentAssembly>绑定配置段。
3. 调整信任权限(需服务器操作权限)
若服务器管理员允许,可通过以下方式调整:
- 在web.config的
<system.web>节点下添加:
<trust level="Medium" originUrl="" />
- 或请求管理员在服务器根web.config中为站点添加自定义信任策略,放开CodeDom相关权限。
内容的提问来源于stack exchange,提问作者marciojlb
相关产品推荐
相关产品推荐

