我们正在进行持续的构建,并正在尝试将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但具有远程主机可执行文件的网络核心应用。
答案 0 :(得分:2)
发布配置文件应通过传递与构建一起使用
-p:DeployOnBuild=true -p:PublishProfile=<ProfileName>
到dotnet build
或msbuild
。这与“经典” 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中默认输出的一部分。