在Asp.Net的/ bin文件夹中,Roslyn“需要”什么/为什么?

这里有一堆相关的问题 ,虽然大多数答案定义了 Roslyn和/或提供了一个“修复”一些问题( exe ,托pipe提供商等)

我似乎无法跟踪的是/bin/roslyn的“为什么”和“为了什么”(也许只在ASP.Net MVC / Web API的上下文中)。

我碰到类似的问题(托pipe – .exe限制,对4.6支持等),我的“修复”是“只部署到Azure” (当然,一切顺利)。 但是,真的,这不回答:

  • 他们为什么需要?
  • 这是否意味着它们被用于runtime编译(我的大脑指出这一点,但这是一个完整的猜测/我也许是错的grok),正如这个SOpost显示 – 除非纠正,这是“它”(更多下面)。
  • 它似乎“删除包”是一个“修复” (根据一些过去的答案) , 但如果是这样,它(重新)乞求的问题

我认为理解这将有助于 – 例如我不能成为唯一一个看到.exe “需要”的眉毛。


更新

去显示“隐藏的gem”存在:)我已经读了一遍又一遍 …毕竟它已经有一段时间了 – 但不是评论线程。 大错误 – 这一直在盯着我(至less在这个交stream之后):

Dmitry Dzygin 2015年6月2日上午12:53

我已经尝试了NuGet包的最新版本,但编译器加载/执行的方式似乎有所不同。

在v0.2.0.0版本中,Roslyn编译器将被加载到内存中,从而大大提高了不具有多个* .as * x / *。cshtml文件的预编译网站的性能。 然而,新版本的function是一个新的/bin/roslyn/csc.exe文件,每个文件执行一次,彻底删除了上面提到的优化function…..

金:

XMao 2015年6月2日1:22 PM

@Dmitry /bin/Roslyn csc.exe的工作是调用位于同一文件夹中的VBCSCompiler.exe VBCSCompiler.exe是进行实际编译工作的进程。 如果VBCSCompiler已经在运行,那么csc.exe将会重新使用它,因此我们仍然可以获得所提到的性能改进。

心连心…


更新:10/2017

似乎这是相关的所有这一次,所以进一步更新。

@Donny V下面的答案是一个选项 。 通过完整地编译你的应用程序,包括所有的Views.cshtml / .vbhtml ),你不需要在你的应用程序的exe

即使Visual Studio(直到今天,VS 2017,令人困惑) 仍然会在Publish过程中创build/bin/roslyn和它的内容, 即使设置了“完全编译”,情况也是如此

您可以通过排除 /bin/roslyn文件夹及其内容,将应用程序推送到您的托pipe提供商时进行testing。

警告

如前所述,完全编译您的应用程序意味着您将不得不重新编译它,即使是View级别更改。

这是从MSDN论坛。
https://social.msdn.microsoft.com/Forums/vstudio/en-US/442b100a-2b88-4ac4-b655-0c1345791f15/roslyn-cscexe-web-api-2-on-hosting-server?forum=msbuild

我注意到卸载这个包的一个小缺点:

https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform

如果在视图(MVC项目)中使用了一些新的C#6.0语言function将不会编译。 我的许多观点使用? 用于访问模型属性的空检查运算符。 所有这些视图现在都会在我的Godaddy托pipe的MVC 5应用程序上返回错误。

发生此错误是因为视图(默认情况下)在运行时使用.NETpipe道(未预编译)进行编译。

要解决此问题,只需在发布configuration文件设置中取消选中“允许预编译的网站可更新”选项。 这应该预编译你的视图,并允许你的C#6.0(最新版本的Roslyn编译器)像冠军一样运行。

只是希望看到这个问题的任何人知道卸载它的原因,以及为什么它在那里

由于无法删除bin / roslyn中较旧的文件,所以在Visual Studio 2017 Community Edition中一直遇到此问题,因为项目无法重build。 基于OP的黄金评论,我现在保持任务pipe理器打开(Ctrl + Shift + Esc)并杀死VBCS.exe进程。 现在可以删除bin / roslyn中的有问题的文件。

它的另一个特点是它不需要构build服务器来实际上具有编译器依赖性。 你把你要使用的编译器发送给构build服务器,它只是使用你告诉它的内容。