什么/为什么罗斯林"需要"在Asp.Net的{bin}文件夹中

时间:2015-11-16 16:29:09

标签: asp.net-web-api asp.net-mvc-5 roslyn

虽然大多数答案都是定义 Roslyn和/或提供"修复"但是这里有很多related questions。某些问题(exe,托管服务提供商等)

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

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

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

我认为理解这会有所帮助 - 例如我不可能成为唯一一个看到.exe需要的人{"需要" ....

更新

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

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

  

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

     

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

     

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

黄金:

  

XMao 2015年6月2日下午1:22

     

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

... H个

更新:10/2017

似乎这在所有这段时间之后都是相关的,所以进一步更新。

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

即使Visual Studio(直到今日,VS 2017,令人困惑)/bin/roslyn中创建Publish及其内容,情况也是如此过程,即使"完全编译"已设置

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

警告

如上所述,完全编译您的应用程序意味着您必须重新编译它,即使View级别更改也是如此。

5 个答案:

答案 0 :(得分:29)

这取自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

     

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

     

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

     

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

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

答案 1 :(得分:8)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

Roslyn是对C#和VB.net编译器的完全重写,每种编译器均以各自的语言编写,例如C#编译器是用C#而不是C ++编写的。 Roslyn是开源的(GitHub上的Roslyn),因此您甚至可以从理论上创建自己的C#或VB.net版本!

什么叫罗斯林(Roslyn),最早是在2008年由PDC会议上的安德斯·赫斯伯格(Anders Hejlsberg)提到的,但是直到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+

答案 4 :(得分:0)

需要注意的两件事: 1)删除它可以“解决”问题,但是可以通过回退到与以后的语言功能不兼容的内置旧式旧编译器来“解决”该问题。
2)在许多情况下,无法进行预编译。如果模型中的信息已预先编译,您将如何显示它,然后显示对该数据的更改?您在局部视图中刷新的所有数据将永远不会更新。

另一个有趣的地方是确保您正在跟踪roslyn软件包中的“ build”目录。如果不这样做,它不会引发错误,但是当您尝试加载它时,它不会编译您的网站。完全跟踪,它可以正常工作。我们将其部署到其他开发系统,而无需先在这些系统上安装它,这是可能的,因为它是NuGet软件包。