我想在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问题)
答案 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 line和Visual Studio部署的演练,您会注意到他们会告诉您使用 dotnet在程序中发布。这与ASP.NET核心应用程序完全相同,因为they can be deployed as console applications。
简而言之,可以使用.exe
文件制作自包含部署包,但 NOT (尚未)可以制作.NET Core上的自包含EXE 。