iis 错误“CodeDom提供程序类型“Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider,....找不到

dddzy1tm  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(264)

我使用Visual Studio 2019创建了一个最简单的ASP.NET Web表单应用程序。它在Visual Studio中工作正常。然后,我将同一台计算机上的应用程序部署到IIS 10中。运行应用程序时,我收到以下错误:
解析器错误消息:未能找到CodeDom提供程序类型“Microsoft.CodeDom.提供程序.. Net编译器平台.CSharpCodeProvider,Microsoft.CodeDom.提供程序.. Net编译器平台,版本=2.0.1.0,区域性=中性,PublicKeyToken=31bf3856ad364e35
我已检查出文件Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll确实存在,并且它确实已部署到IIS中。问题的根本原因是什么?

vyswwuz2

vyswwuz21#

看起来你没有Rosyln设置和安装在该Web服务器上。但是,这取决于您部署模型。如果您使用的是asp.net“应用程序”,那么在发布时,您的网站已经预先编译好了,这应该没有关系。然而,存在一个很大的例外,那就是如果你有/使用app_code文件夹。
我现在要做的是将该文件夹重命名为MyCode,对于放置在该文件夹中的任何代码,右键单击,选择Properties,并将构建操作设置为compile。因此,在这一点上,你不关心Roslyn是否安装。(如果您在IIS服务器上安装了Rosyln,这并不重要,因为您的站点是预编译的,并且源代码在构建时就被触发了。
但是,如果您部署的是一个网站(在部署时不会进行预编译),那么这就“更加困难”了,因为您在页面和app_code中的代码模块没有进行预编译,因此IIS现在将尝试重新编译这些代码。(顺便说一句,这是使用asp.net网站“应用程序”而不是使用ASP.NET网站的一个很大的原因)。
因此,您需要确保IIS上安装了Rosslyn支持。
或者,你可以在发布过程中这样做,但你仍然必须摆脱app_code文件夹(或者像我一样重新命名它以避免这种“困难”)。
我会考虑在你的开发盒上重新安装Rosyln支持,并为该项目添加nugget包:
x1c 0d1x的数据
另一种方法呢?删除并且不使用Rosslyn编译器选项。然而,这样做很可能意味着对项目和代码进行一些更改--这取决于您使用了多少Rosslyn选项。
那么,在构建并创建发布的文件夹之后呢?检查bin文件夹,你在那个文件夹里看到Roslyn支持文件了吗?
如前所述,您没有提到您使用的是哪种发布模型。如果这是一个“应用程序”,那么最简单的方法就是重命名app_code,并将app_code中每个模块/类的属性设置为在构建时编译。

相关问题