IIS 7无法找到Microsoft.CodDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider DLL。

4
当使用自定义的构建配置部署我们的Web服务时,在部署后,我会遇到以下错误:
“CodeDom提供程序类型“Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider,Microsoft.CodeDom.Providers.DotNetCompilerPlatform”无法找到。”
尝试浏览该网站时出现此错误。但是,在bin\~configurationName~文件夹中,我可以很好地找到指定的DLL。错误是在我的web.config文件中引用了以下行:
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
    </compilers>
  </system.codedom>

奇怪的是,在同一台服务器上构建/部署调试时,我没有遇到这个问题,一切似乎都正常工作(这让我相信这个错误存在于我的项目配置中,而不是部署服务器)。当出现此错误时,我正在构建我们自定义定义的 QA 配置,该配置输出到 bin\QA,因此我想知道是否有特殊的操作需要执行,以使 ASP.NET 编译器查看特殊的输出文件夹?


1
好的,看起来我需要将这些文件放在bin\文件夹中,而不是build config子文件夹中。我进行了更改,现在一切都很好。所以,任何未来遇到此问题的人,请确保所有库最终都放在站点的bin\文件夹中,而不是bin~config~中。 - Michael H
你可以将其发布为答案,然后接受它,以明确解决了你的问题。 - svick
2个回答

0

这是由于我将站点的所有程序集嵌套在一个带有配置名称的文件夹下,就像您在控制台/Windows应用程序中所做的那样(例如“bin \ Debug”)导致的。对于Web应用程序,程序集不会嵌套在配置文件夹下(例如,它们应该放在“bin \”中)。

希望这能帮助其他人!


0

长期的部署解决方案是暂时避免使用Roslyn。

问题在于您正在IIS上使用Roslyn编译器和引用。许多部署服务器仍不完全支持Roslyn。

解决方案是移除Roslyn,这不会影响项目功能!

我曾经写过类似的答案来回答另一个与此类似的问题。请查看我的答案https://dev59.com/4lwX5IYBdhLWcg3w2SZq#42668206


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接