''Could not find file ... bin\roslyn\csc.exe' [duplicate]

In Visual Studio 2017, when hitting Ctrl+F5 to run my ASP.NET Framework Web API server, I get:

Could not find file ... bin\roslyn\csc.exe:

Server Error '/' in Application.

Running Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r in the package manager console is not a permanent fix in the sense that the server error appears again when the package files are missing. How can I get rid of this error once and for all so that the needed packages are automatically (and silently) reinstalled as soon as I reopen, build, and run my Visual Studio solution?


Code to reproduce the error: https://user.it.uu.se/~hesc0353/SrvrErr-reproduce.zip
(Originally from https://github.com/aspnet/AspNetDocs/tree/master/aspnet/web-api/overview/advanced/calling-a-web-api-from-a-net-client/sample/server/ProductsApp)



Solution 1:[1]

As you already mention, the quick fix is to use the package manager, Tools > Nuget Package Manager > Package Manager Console, to run

Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r

as pointed out by https://stackoverflow.com/questions/32780315#34391473

Packet Manager Console - how to open

But an alternative solution (which I consider to be more robust) is to remove an attribute of your project's Web.config file. (Web.config is in the same directory as your .csproj file.)

Open the Web.config file in a text editor (or inside Visual Studio).
- In the tag configuration | system.codedom | compilers | compiler language="c#;cs;csharp", completely remove the type attribute.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <!-- ... -->
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:default /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.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>
</configuration>

In short, remove the line that starts with type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.

(Presumably, the same fix works for Visual Basic as well as for Csharp, but I have not tried it.)

Visual Studio will take care of the rest. No more Server Error in '/' Application.

In the example code I provided in the zip file above you will now get HTTP Error 403 when you hit Ctrl+F5.

HTTP Error 403.14 - Forbidden

Try replacing http://localhost:64195 in your web browser with http://localhost:64195/api/products.
The web API now displays as it should:

A web API containing products

As a provocation, I even tried removing the whole package directory of my Visual Studio solution.
It was automatically and silently recreated as soon as I (re-)built it.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1