如何使用远程主机的 dotnet 发布执行依赖于框架的部署

Kai*_*r69 3 c# msbuild .net-core asp.net-core

我们正在进行持续构建,并尝试将 dotnet 核心应用程序发布为 Windows 服务。我们可以使用具有以下发布配置文件的 Visual Studio 执行此操作

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>FileSystem</WebPublishMethod>
    <PublishProvider>FileSystem</PublishProvider>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <SiteUrlToLaunchAfterPublish />
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
    <ExcludeApp_Data>False</ExcludeApp_Data>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <RuntimeIdentifier>win-x64</RuntimeIdentifier>
    <ProjectGuid>d655df5a-9266-470d-becd-6d62c919e961</ProjectGuid>
    <SelfContained>false</SelfContained>
    <_IsPortable>true</_IsPortable>
    <publishUrl>C:\publish\webapi</publishUrl>
    <DeleteExistingFiles>True</DeleteExistingFiles>
  </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

起初我们尝试了阻力最小的路径并尝试调用 dotnet publish project /p:PublishProfile=<FolderProfileName>

此命令忽略了发布配置文件设置,因此我们退回到手动设置属性。然而,这只会构建一个带有 exe 但所有网络核心 dll 的自包含应用程序或仅包含 dll 的框架相关应用程序

命令已执行

dotnet publish Project.csproj -c "Release" -o "C:\Publish\App" -r "win-x64" --self-contained false
Run Code Online (Sandbox Code Playgroud)

问题是我如何使用发布配置文件模拟 VS2017 发布网络核心应用程序,因为我遇到了上面指定的问题。

目标输出将是发布没有 aspnetcore dll 但具有远程主机可执行文件的网络核心应用程序。

Mar*_*ich 5

通过传递,发布配置文件旨在与构建一起使用

-p:DeployOnBuild=true -p:PublishProfile=<ProfileName>
Run Code Online (Sandbox Code Playgroud)

dotnet buildmsbuild。这与“经典”ASP.NET 项目相同。

如果您只需要文件系统部署,则可以dotnet publish改用它,它可以直接创建发布输出到目标位置(Web 部署在内部使用相同的机制,通过发布到临时位置然后复制、压缩等)。

dotnet publish当传递运行时标识符(-r选项)时,将自动创建一个独立的部署。

如果你还想要一个主机 exe 来启动运行时,你也可以使用

dotnet publish -r win-x64 --self-contained false -p:UseAppHost=true
Run Code Online (Sandbox Code Playgroud)

发出一个 .exe 文件,您可以将其用作 Windows 服务而不是path\to\dotnet.exe path\to\app.dll,它仍将使用机器范围的 .NET Core 安装。这可能会也可能不会成为 3.0 中默认输出的一部分。