You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio 2017中ASP.NET Web API启动报错的永久解决方法咨询

彻底解决ASP.NET Framework Web API中Roslyn csc.exe缺失的问题

我之前帮不少开发者搞定过这个头疼的问题——每次重新打开解决方案或者清理构建后,就弹出找不到bin\roslyn\csc.exe的错误,手动跑Update-Package命令实在太麻烦。下面给你几个永久解决的办法,让包和依赖文件自动到位:

方法1:开启NuGet自动包恢复(基础必做)

首先确保Visual Studio会自动帮你补全缺失的NuGet包,这是解决问题的基础:

  • 打开VS2017,点击顶部菜单的 Tools > Options > NuGet Package Manager > General
  • 勾选这两个选项:
    • Allow NuGet to download missing packages
    • Automatically check for missing packages during build in Visual Studio
  • 右键你的解决方案,选择 Restore NuGet Packages,等恢复完成后再构建项目。

这样设置后,下次打开解决方案或者清理bin/obj文件夹后,VS会自动拉取缺失的Microsoft.CodeDom.Providers.DotNetCompilerPlatform包,不用手动操作。

方法2:修改项目文件,强制构建时复制Roslyn文件(兜底方案)

如果自动包恢复后还是偶尔出现文件缺失,那是因为包的安装脚本有时候没把Roslyn文件正确复制到输出目录。我们可以给项目加一段MSBuild脚本,强制在构建前复制文件:

  1. 右键你的Web API项目,选择 Unload Project
  2. 右键已卸载的项目,选择 Edit [你的项目名].csproj
  3. 在项目文件的末尾(</Project>标签之前)添加这段代码:
<Target Name="EnsureRoslynFiles" BeforeTargets="Build">
  <ItemGroup>
    <RoslynFiles Include="$(SolutionDir)packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.*\tools\RoslynCompiler\**\*.*" />
  </ItemGroup>
  <Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(OutputPath)roslyn\" SkipUnchangedFiles="true" />
</Target>
  1. 保存文件,右键项目选择 Reload Project,然后重新构建运行。

这段脚本会在每次构建前,自动从NuGet包的安装目录里把Roslyn的所有编译器文件复制到输出目录的roslyn文件夹,彻底杜绝文件缺失的问题。

方法3:替换为Legacy CodeDom提供者(备选,不推荐)

如果你的项目不需要使用最新的C#语言特性,可以考虑换成旧版的CodeDom提供者,完全绕过Roslyn依赖:

  • 在程序包管理器控制台执行:
    Uninstall-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
    Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform.Legacy
    

这个包会使用系统自带的编译器,不会依赖本地的Roslyn文件,但缺点是没法用C#6及以后的新特性,所以只适合老项目。

验证方式

做完上述设置后,删除项目的bin和obj文件夹,重新打开解决方案,直接构建运行——这次应该不会再弹出找不到csc.exe的错误了,一切都会自动处理。

内容的提问来源于stack exchange,提问作者Henke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:06:23