There are a bunch of related questions on this, though most of the answers define Roslyn and/or provide a "fix" to some issue (exe
, with hosting providers, etc.)
What I can't seem to track down is the "why" and "what for" (perhaps only in the context of ASP.Net MVC/Web API) in /bin/roslyn
.
I ran in to similar issues (hosting - .exe
restrictions, support for 4.6
, etc.) and my "fix" was to "just deploy to Azure" (of course everything works without a hitch). But really, this doesn't answer:
why are they needed?- does this mean that the they are used for
runtime
compilation(my brain points to this, but that is a complete guess/my perhaps wrong grok), as this SO post shows- unless corrected, this is "it" (more below). - it seems "removing the package" is a "fix" (based on some past answers),
but if so, it (re)begs the question
I think understanding this will help - e.g. I can't be the only one who will have an eyebrow raised seeing an .exe
"needed"....
Update
Goes to show that "hidden gems" exist :) I've read this over and over...after all it's been there for some time now - but not the comments thread. BIG mistake - it was staring at me all this time (or at least since this exchange):
Dmitry Dzygin 2 Jun 2015 12:53 AM
I have tried the latest version of the NuGet package, but there's seem to be a difference in the way the compiler is loaded/executed.
In the v0.2.0.0 the Roslyn compiler would be loaded into memory, improving greatly performance for not pre-compiled websites with multiple *.as*x/*.cshtml files. The new version, however, features a new
/bin/roslyn/csc.exe
file, which is executed once per file, completely removing the mentioned above optimization feature.....
Gold:
XMao 2 Jun 2015 1:22 PM
@Dmitry The job of the
csc.exe
in/bin/Roslyn
is to invoke theVBCSCompiler.exe
, which sits in the same folder.VBCSCompiler.exe
is the process that does the actual compilation work. If the VBCSCompiler is already running csc.exe will reuse it and thus we will still gain the mentioned performance improvement.
Hth...
Update: 10/2017
Seems this is relevant after all this time so a further update.
The answer below by @Donny V is an option. By fully compiling your application, including all Views
(.cshtml
/.vbhtml
), you wouldn't need that exe
in your application.
This is true even if Visual Studio (to this day, VS 2017, confusingly) will still create the /bin/roslyn
and it's contents in the Publish
process, even if "full compile" is set.
You can test this by excluding the /bin/roslyn
folder and it's contents when pushing your application to your hosting provider.
Caveat:
As mentioned, fully compiling your application means you'll have to recompile it, even for View
level changes.