【问题标题】:.NET Core - how does the 'dotnet publish' command work?.NET Core - “dotnet publish”命令如何工作?
【发布时间】:2018-09-20 09:19:24
【问题描述】:

我有一个解决方案,其中包含一些针对 .NET Standard 2.0 的项目和一个针对 .NET Core 2.1 的控制台应用程序项目。

我将“myFolder”设置为输出文件夹。 从 Visual Studio 构建,我得到所有 DLL 文件:

  • “myFolder\netstandard2.0”
  • “myFolder\netcoreapp2.1”

我使用“dotnet build”命令得到了同样的结果。 现在我需要我的控制台应用程序的 EXE 文件。 所以我使用“dotnet publish -c Release -r win-x64 MySolution.sln”命令。

现在我得到了这个新目录“myFolder\netcoreapp2.1\win-x64”,我可以在其中找到所有 DLL 文件和控制台应用程序的 EXE 文件。

还不够!

我又找到了一个目录“myFolder\netcoreapp2.1\win-x64\publish”,在这里我又找到了所有 DLL 文件和控制台应用程序的 EXE 文件。

它们有什么含义?我阅读了command documentation,但没有找到答案。

【问题讨论】:

标签: deployment build .net-core


【解决方案1】:

根据文档

-o|--output <OUTPUT_DIRECTORY>

指定输出目录的路径。如果未指定,则默认为 ./bin/[configuration]/[framework]/publish/ 用于依赖于框架的部署或 ./bin/[configuration]/[framework]/[runtime]/publish/ 用于自包含部署。

dotnet publish -c Release -r win-x64 --output ./MyTargetFolder MySolution.sln

【讨论】:

    【解决方案2】:

    要成功发布和部署,您真正需要了解的是,您需要 dotnet publish 并确保您具有发布配置 -c Release,以及命令行上的任何其他必需选项。

    您的所有文件都将位于“发布”子文件夹中,例如./bin/Release/[您的解决方案所针对的框架]/publish。此处包含的文件是运行应用程序/服务实例所需的一切。 MySolution.dll 是您的应用/服务的入口点,将自动链接到发布文件夹中存储的所有其他依赖项和配置。

    要配置和部署正在运行的实例,您需要弄清楚如何将所有这些文件部署到服务器,并以某种方式配置某些东西(例如 Web 服务器、运行时、服务主机......)以调用您的 @987654324 @。

    请注意,您在 dotnet publish 中指定了 -r,这意味着您的应用程序旨在在 64 位 Windows 下运行,而不是 Linux 发行版或 OS X(这使得它的可移植性降低,但具有将您的应用程序与您部署到的服务器上已安装运行时的更改隔离开来的优势。)。这就是为什么您会看到一个额外的文件夹 win-x64

    此外,您还从解决方案文件MySolution.sln 指定的解决方案配置显式构建,这可能是最可靠的做法,因为这将确保您的解决方案用作依赖项的任何项目(这是一个典型的好实践)将包含在构建/发布中。

    【讨论】:

    • 我认为让原始发布者感到困惑的事情(目前让我感到困惑)是发布命令创建了一个包含所有 dll 的文件夹,以及在这三个文件夹(属性、发布、运行时)和内部发布文件夹再次具有所有 dll。这有点令人困惑!
    猜你喜欢
    • 1970-01-01
    • 2018-02-27
    • 2021-01-09
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    相关资源
    最近更新 更多