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

时间:2018-01-12 00:05:40

标签: asp.net-mvc deployment asp.net-core .net-core asp.net-core-2.0

我想在Visual Studio 2017中创建Kestrel独立.exe 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>

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

2 个答案:

答案 0 :(得分:5)

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

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

  

dotnet publish --conflease Release --runtime win-x64

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

答案 1 :(得分:5)

根据this answer

  

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

     

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

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

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

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

自包含部署的优点和缺点

  

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

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

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

  •   
     

它也有许多缺点:

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

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

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

  •   

我意识到您已找到Microsoft deployment document,但如果您完成command lineVisual Studio部署的演练,您会注意到他们会告诉您使用 dotnet在程序中发布。这与ASP.NET核心应用程序完全相同,因为they can be deployed as console applications

简而言之,可以使用.exe文件制作自包含部署包,但 NOT (尚未)可以制作.NET Core上的自包含EXE