在Visual Stuido 2022中创建的项目需要发布到文件夹,使用Visual Studio的发布功能创建发布文件然后执行发布,一切正常,部署文件可以生成到预设的目录中。在Visual Studio中界面是这样的:
接下来,由于需要使用自动部署,希望使用命令行工具进行发布,这可以使用dotnet publish命令完成:
dotnet publish ./src/IDS4Admin.Admin/IDS4Admin.Admin.csproj /p:Configuration=Release /p:PublishProfile=FolderProfile3
这时问题出现了,生成的文件没有拷贝到预设的目录,而是在项目的bin/Release目录中又新创建了publish目录。仔细研究一下Visual Studio生成的部署配置文件FolderProfile3.pubxml,发现有些问题:
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<DeleteExistingFiles>False</DeleteExistingFiles>
<ExcludeApp_Data>False</ExcludeApp_Data>
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<PublishProvider>FileSystem</PublishProvider>
<PublishUrl>D:\Asp.Net Core\IdentityServer4Admin\IDS4Admin\Publish\Admin\x64std</PublishUrl>
<WebPublishMethod>FileSystem</WebPublishMethod>
<SiteUrlToLaunchAfterPublish />
<TargetFramework>net5.0</TargetFramework>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<ProjectGuid>698cac59-4332-4767-91e7-fe088b3220b0</ProjectGuid>
<SelfContained>true</SelfContained>
</PropertyGroup>
</Project>
生成的路径使用的是PublishUrl,生成方法是WebPublishMethod,这应该有问题,文件路径应该使用PublishDir,生成的方法应该使用PublishProtocol,于是手工创建一个新的配置文件FolderProfile4.pubxml,修改上面两项内容:
<PublishDir>..\..\..\Publish\Admin\x64std</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
使用命令行生成可以了,文件能够正确输出到预设的目录。可新的问题产生了,这个配置文件在Visual Studio中被认为是Web部署:
在Visual Studio中不能正确执行部署了。
从现象上看,似乎是Visual Studio把两种部署方式搞反了,在现实中,只能创建两个部署文件,一个用于命令行自动部署,一个用于Visual Studio手工生成。