gpt4 book ai didi

asp.net - 使用 Roslyn 构建,但将 "compile-at-runtime"可执行文件留在门口?

转载 作者:行者123 更新时间:2023-12-04 02:25:50 24 4
gpt4 key购买 nike

关于 C# 编译器的讨论很多 Roslyn在 StackOverflow 和互联网上。很多人问what and why与 Roslyn 一起,而其他人则问如何 get rid of it .

我的问题与后一个问题有关。引用自 here 的 Kemal Kefeli ,但经常逐字迭代数十次(例如 another example 的迭代),以删除 Roslyn:

When you create a new web project, two NuGet packages automatically added to your project. If you remove them, your problem should be solved. Package names are: "Microsoft.CodeDom.Providers.DotNetCompilerPlatform" and "Microsoft.Net.Compilers".



但是,如果您使用 Roslyn 提供的 C# 6 功能,则此方法不起作用。通过删除这两个 nugget 包,您就放弃了使用这些功能的任何机会。

我的问题是,如何使用 Roslyn 编译所有内容,同时避免发生任何编译器运行时操作,最重要的是, csc.exe , vbc.exe , 和 VBCSCompiler.exe从被放置在最终发布版本中(在 Roslyn 文件夹中)。

我正在移植 StackOverflow 的 Opserver 成一个软件。该软件允许用户在其中托管嵌入式 Web 服务器和网页。但是,该软件对允许上传的内容非常挑剔,可执行文件(如 Roslyn 文件夹中的那些)是 不是 出于安全原因,允许在运行时上传和执行。

Opserver 依赖于 C# 6 功能,因为如果我删除这两个 NuGet 包,错误会在编译生成的文件中出现。但是,如果我更简单地恢复到 compile strictly with C#5.0 编译器,那么我们可以清楚地看到:

5.0 errors## Heading ##

如果我保留 NuGet 包并取消选中 allow precompiled site to be updatable发布时,为了禁止 Roslyn 在运行时编译文件,后面是来自 here 的 Rutix 评论:

Keep in mind that removing these packages [as told by Kemal Kefeli] will break the use of C# 6 features. This could be solved by unchecking "Allow precompiled site to be updatable" which pre-compiles the views ect.



Don't compiler at runtime

它仍然在 Roslyn 文件夹中生成可执行文件和关联的 DLL,但 DLL 明显减少。我怎样才能在运行时删除 Roslyn 依赖项,从而删除输出版本中的可执行文件并严格编译 一切在编译时?

最佳答案

在完全预编译的 ASP.NET 项目(“允许预编译的站点可更新”禁用)中,不需要使用应用程序恕我直言部署编译器。

我在我的 .NET 4.6 ASP.NET 应用程序(Web 窗体和 MVC 的混合)中使用 Roslyn 并且预编译的应用程序在从已发布的站点中删除 Roslyn 文件夹\文件后工作正常......

更新 :一段时间后,发现部署包中没有 Roslyn 的唯一地方是在浏览器中访问 ASMX(旧式 ASP.NET SOAP Web 服务)的问题 - ASMX 的“帮助”页面显然是在运行时构建的,即使是完全预编译的ASP.NET 应用程序并抛出异常(尽管 WS 本身运行正常)

关于asp.net - 使用 Roslyn 构建,但将 "compile-at-runtime"可执行文件留在门口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45308445/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com