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

EdS*_*dSF 69 roslyn asp.net-web-api asp.net-mvc-5

虽然大多数答案定义了 Roslyn和/或为某些问题提供了"修复"(与托管服务提供商等),但是有很多相关的问题.exe

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

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

  • 他们为什么需要?
  • 这是否意味着他们用于runtime编译(我的大脑指向这个,但这是一个完整的猜测/我可能是错误的grok),正如这篇SO帖子所示 - 除非纠正,这是"它"(更多下面).
  • 似乎"删除包"是一个"修复" (基于一些过去的答案),但如果是这样,它(重新)回答问题

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


更新

去表明存在"隐藏的宝石":)我已经一遍又一遍地阅读 ......毕竟它已经存在了一段时间 - 但不是评论主题.大错 - 它一直盯着我(或者至少从这次交换开始):

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

我已经尝试了最新版本的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.exe,在同一文件夹它坐落.VBCSCompiler.exe 是进行实际编译工作的过程.如果VBCSCompiler已在运行,csc.exe将重用它,因此我们仍将获得上述性能提升.

心连心...


更新:10/2017

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

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

即使设置了"完全编译",即使 Visual Studio(直到今天,VS 2017,令人困惑)仍然/bin/roslynPublish过程中创建它的内容,这也是如此.

您可以通过测试该排除/bin/roslyn文件夹,并推动应用程序到你的托管服务提供商时,它的内容.

警告:

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

Don*_* V. 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编译器)像冠军一样运行.

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

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

Man*_*ish 8

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


Pau*_*etz 1

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