【发布时间】:2016-02-17 19:57:15
【问题描述】:
对此有一堆related questions,尽管大多数答案定义 Roslyn 和/或为某些问题提供“修复”(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...毕竟它已经存在了一段时间 - 但 不是 cmets 线程 - 最初引用的链接,大约在 2014 年,已由 Microsoft 重新设计,不再显示 cmets……幸运的是,相关部分如下。
大错特错 - 它一直盯着我看(或者至少从这次交流开始):
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.exe。VBCSCompiler.exe是进行实际编译工作的过程。如果 VBCSCompiler 已经在运行 csc.exe 将重用它,因此我们将 仍然获得上述性能改进。
第...
更新:2017 年 10 月
似乎这在所有这些时间之后是相关的,所以进一步更新。
answer below by @Donny V 是一个选项。通过完全编译您的应用程序,包括所有Views (.cshtml/.vbhtml),您的应用程序中将不需要exe。
即使 Visual Studio(至今仍是 VS 2017,令人困惑)仍然会在 Publish 进程中创建 /bin/roslyn 及其内容,也是如此,即使“完全编译”已设置。
您可以通过排除 /bin/roslyn 文件夹及其内容来测试这一点,然后将您的应用程序推送到您的托管服务提供商。
警告:
如前所述,完全编译您的应用程序意味着您必须重新编译它,即使View 级别更改也是如此。
【问题讨论】:
-
你在使用实体框架吗?
-
@JeroenVannevel - 目前还没有具体,但是这些位已经准备好了......
-
那么添加EF作为对项目的引用?直到最近的 PR EF 都依赖于 Roslyn。
-
@JeroenVannevel 是的,但如果没有记错的话,它来自默认脚手架(除非我对“最新”EF 进行了 Nuget 更新)。我仍然不明白它与 deployment 中“需要”可执行文件 (
.exe) 的关系 - 可能只是库/dll,但需要由exe中的exe执行部署环境 ? -
@PederRice 这可能会被 SO 中的任何 MS 人员更正。如果您遇到托管问题(限制
exe)您could remove these packages in your project,但是如果您这样做,您需要调试您的代码 - 如果您使用一些新功能或具有 Roslyn 依赖项的功能,事情会破裂。不幸的是,一个“安全”的方法是恢复到4.5.x- 如果项目不计划用于 Azure 部署,这是我的个人“修复”。
标签: asp.net-web-api asp.net-mvc-5 roslyn