在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
级别更改。
我注意到卸载这个包的一个小缺点:
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服务器,它只是使用你告诉它的内容。