如何将.NET Core 2 MVC Web应用程序编译为EXE?

use*_*326 5 deployment asp.net-mvc .net-core asp.net-core asp.net-core-2.0

我想.exe在Visual Studio 2017中创建Kestrel独立的DotNetCore 2.0 MVC Web API应用程序,但是我找不到任何文档.关于如何将其编译为自包含.exe(不使用dotnet run).

这里的Microsoft文档:https://docs.microsoft.com/en-us/dotnet/articles/core/deploying/deploy-with-vs仅涵盖控制台应用程序,并且对.csproj的修改没有任何区别

<RuntimeIdentifiers>win10-x64</RuntimeIdentifiers>
Run Code Online (Sandbox Code Playgroud)

(注意这不是.NET Core 1.x问题)

Cod*_*ler 8

dotnet publish命令负责打包可部署的.Net Core应用程序.它将构建应用程序并将其所有依赖项复制到输出目录.

最简单的方法是切换到项目目录(csproj所在的目录)并执行:

dotnet发布 - 配置发布 - 运行时win-x64

根据您的需要更改构建配置和运行时版本.您可以在我引用的文档上学习其他命令行设置.


Nig*_*888 5

根据这个答案:

目前,没有用于创建单个可执行文件的故障安全方法.由于涉及很多类型转发dll文件,即使ILMerge和类似工具也可能无法产生正确的结果(尽管这可能会有所改进,但问题是这些方案未经过大量测试,尤其是在生产应用程序中)

目前有两种部署.NET Core应用程序的方法:

  • 作为"可移植应用程序"/"依赖于框架的应用程序",需要dotnet在目标机器上安装可执行文件并安装框架.这里,XYZ.runtimeconfig.json它用于确定要使用的框架版本,还指定运行时参数.此部署模型允许在各种平台(windows,linux,mac)上运行相同的代码
  • 作为"自包含应用程序":这里整个运行时包含在已发布的输出中,并生成可执行文件(例如yourapp.exe).此输出特定于平台(通过运行时标识符设置),并且只能在目标操作系统上运行.但是,生成的可执行文件只是一个小垫片,可以启动运行时并加载应用程序的主dll文件.这也允许XYZ.runtimeconfig.json设置其他运行时属性,如垃圾收集设置.(将其视为"新" app.config文件)

将来,CoreRT运行时(在编写本文时仍在开发中)旨在允许创建特定于运行时的单个预编译本机可执行文件,而不需要任何其他文件.

虽然这个问题在6个多月前(由您真实地提出),但看起来CoreRT仍在进行中.

自包含部署的利弊

部署自包含部署有两个主要优点:

  • 您可以单独控制随应用程序部署的.NET Core版本..NET Core只能由您提供服务.

  • 您可以放心,目标系统可以运行您的.NET Core应用程序,因为您提供了将运行的.NET Core版本.

它也有许多缺点:

  • 由于.NET Core包含在部署包中,因此必须提前选择要为其构建部署包的目标平台.

  • 部署包的大小相对较大,因为您必须包含.NET Core以及您的应用程序及其第三方依赖项.

  • 将大量独立的.NET Core应用程序部署到系统可能会占用大量磁盘空间,因为每个应用程序都会复制.NET Core文件.

我意识到您已经找到了Microsoft部署文档,但是如果您通过命令行Visual Studio部署的演练,您会注意到他们告诉您在过程中使用dotnet发布.这与ASP.NET Core应用程序完全相同,因为它们可以部署为控制台应用程序.

总之,它有可能使一个自包含的部署包有.exe文件,但它是不是(还)有可能使一个自包含的EXE .NET的核心.