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

问题描述 投票:66回答:4

虽然大多数答案定义了Roslyn和/或为某些问题提供了“修复”(related questions,托管服务提供商等),但这里有一堆exe

我无法追查的是/bin/roslyn中的“为什么”和“为什么”(可能仅在ASP.Net MVC / Web API的上下文中)。

我遇到了类似的问题(托管 - .exe限制,支持4.6等),我的“修复”是“只是部署到Azure”(当然一切都顺利)。但实际上,这并没有回答:

  • 他们为什么需要?
  • 这是否意味着它们用于runtime编译 (我的大脑指向这个,但这是一个完整的猜测/我可能是错误的grok),就像this SO post shows - 除非更正,否则这是“它”(更多信息如下)。
  • 似乎“删除包”是一个“修复”(based on some past answers), 但如果是这样的话,它会重新提出问题

我认为理解这将有所帮助 - 例如我不可能是唯一一个会看到一个.exe“需要”的眉毛......


更新

去表明存在“隐藏的宝石”:)我有read this over and over ...毕竟它已经存在了一段时间了 - 但不是评论主题 - 大约2014年的原始参考链接已由Microsoft重新设计,评论不再显示...幸运的是相关部分如下。

大错 - 它一直盯着我(或者至少从这次交换开始):

Dmitry Dzygin 2015年6月2日12:53 AM

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

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

金:

X Mao 2 Jun 2015 1:22 PM

@Dmitry csc.exe/bin/Roslyn的工作是调用位于同一文件夹中的VBCSCompiler.exeVBCSCompiler.exe是执行实际编译工作的过程。如果VBCSCompiler已在运行,csc.exe将重用它,因此我们仍将获得上述性能改进。

心连心...


更新:10/2017

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

answer below by @Donny V是一个选择。通过完全编译您的应用程序,包括所有Views.cshtml / .vbhtml),您不需要在您的应用程序中使用exe

即使设置了“完全编译”,即使Visual Studio(直到今天,VS 2017,令人困惑)仍将在/bin/roslyn进程中创建Publish及其内容,这也是如此。

您可以通过在将应用程序推送到托管服务提供商时排除/bin/roslyn文件夹及其内容来测试此问题。

警告:

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

asp.net-web-api asp.net-mvc-5 roslyn
4个回答
32
投票

这是从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

如果在Views(MVC项目)中使用某些新的C#6.0语言功能将无法编译。我的很多观点都使用了? null检查运算符以访问Model属性。所有这些视图现在都会在Godaddy托管的MVC 5应用程序中返回错误。

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

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

只是想让任何看过这个问题的人都知道卸载它的后果以及为什么它首先出现在那里


8
投票

在Visual Studio 2017社区版中一直遇到此问题,因为无法删除bin / roslyn中的旧文件,因此无法重建项目。基于OP的Gold评论,我现在打开任务管理器(Ctrl + Shift + Esc)并终止VBCS.exe进程。现在可以删除bin / roslyn中的违规文件。


1
投票

它的另一个特性是它不需要构建服务器实际上具有编译器依赖性。您将要使用的编译器与代码一起发送到构建服务器,它只使用您告诉它的内容。


0
投票

此版本的Visual Studio包含一个名为“Roslyn”的新版C#和VB.net编译器代码。

Roslyn完全重写了C#和VB.net编译器,每个编译器都用各自的语言编写,例如C#编译器是用C#而不是C ++编写的。 Roslyn是开源的(Rosit on GitHub),所以你甚至可以在理论上创建自己的C#或VB.net版本!

什么会成为罗斯林,在2008年由安德斯海尔斯伯格在PDC会议上首次提到,但直到2011年第一次预览才发布。

您可以参考以下链接以获取有关您的问题的更多详细信息。

https://gooroo.io/GoorooTHINK/Article/16253/Visual-Studio-2015-and-Roslyn-Compiler/17944#.VmkfwjaheM8

https://visualstudiomagazine.com/articles/2012/03/20/10-questions-10-answers-on-roslyn.aspx

来自:https://forums.asp.net/t/2079727.aspx?What+is+the+roslyn+folder+

© www.soinside.com 2019 - 2024. All rights reserved.