如何使用与远程主机一起发布的dotnet执行与框架相关的部署

时间:2018-10-17 17:46:52

标签: c# asp.net-core msbuild .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>

首先,我们尝试了阻力最小的路径,并尝试调用 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

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

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

1 个答案:

答案 0 :(得分:2)

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

-p:DeployOnBuild=true -p:PublishProfile=<ProfileName>

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

如果仅需要文件系统部署,则可以使用dotnet publish来直接将发布输出创建到目标位置(Web部署内部使用相同的机制,即发布到临时位置,然后进行复制,压缩等)。

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

如果您还希望主机exe引导运行时,也可以使用

dotnet publish -r win-x64 --self-contained false -p:UseAppHost=true

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