如何为 .NET Core 应用程序扩展 msdeploy/发布管道

cri*_*mbo 5 msdeploy webdeploy msbuild-wpp visual-studio-2017 asp.net-core-2.0

Visual Studio 中的旧样式/.NET Framework webapps 有一个可以自定义的发布管道。例如,Parameters.xml可以指定一个文件,如下所示:

  <PropertyGroup>
    <WebAppPackageConfigDir Condition=" '$(WebAppPackageConfigDir)' == '' ">$(MSBuildProjectDirectory)\Package</WebAppPackageConfigDir>
    <ProjectParametersXMLFile>$(WebAppPackageConfigDir)\Parameters.xml</ProjectParametersXMLFile>
  </PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

以便在构建 MSDeploy 包时,将其中定义的MSDeploy 参数合并到包中。Web 处理管道(主要在 中定义C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\VisualStudio\v15.0\Web\Microsoft.Web.Publishing.targets)支持以多种方式自定义 MSDeploy 包 - 例如,包参数可以在文件或 MSBuild 中定义<ItemGroup>

在 SDK 样式的 webapps(例如 ASP.NET Core webapps)中,使用一个“新的”发布管道,例如C\Program Files\dotnet\sdk\2.1.2\Sdks\Microsoft.NET.Sdk\build\Microsoft.NET.Publish.targets. 这会根据<PublishProtocol>值引入额外的目标文件,例如C\Program Files\dotnet\sdk\2.1.2\Sdks\Microsoft.NET.Sdk.Publish\build\netstandard1.0\PublishTargets\Microsoft.NET.Sdk.Publish.MSDeploy.targetsforPublishProtocol=MSDeploy.\Microsoft.NET.Sdk.Publish.MSDeployPackage.targetsfor PublishProtocol=MSDeployPackage。这两个文件都将_CreateParametersFiles目标定义为:

  <!--
  ***********************************************************************************************
  TARGET : _CreateParameterFiles
  ***********************************************************************************************
 -->

  <Target Name="_CreateParameterFiles">

    <ItemGroup>
      <MsDeployDeclareParameters Remove="@(MsDeployDeclareParameters)" />

      <MsDeployDeclareParameters Include="IIS Web Application Name" >
        <Kind>ProviderPath</Kind>
        <Scope>IisApp</Scope>
        <Match>$(PublishIntermediateOutputPath)</Match>
        <Description></Description>
        <DefaultValue>$(DeployIisAppPath)</DefaultValue>
        <Value>$(DeployIisAppPath)</Value>
        <Tags>IisApp</Tags>
        <Priority></Priority>
        <ExcludeFromSetParameter>false</ExcludeFromSetParameter>
      </MsDeployDeclareParameters>
    </ItemGroup>

    <ItemGroup Condition="'@(_EFSQLScripts)' != ''">
      <MsDeployDeclareParameters Include="%(_EFSQLScripts.DBContext)">
        <Kind>ProviderPath</Kind>
        <Scope>dbfullsql</Scope>
        <Match>%(_EFSQLScripts.Identity)</Match>
        <Description></Description>
        <DefaultValue>%(_EFSQLScripts.ConnectionString)</DefaultValue>
        <Value>%(_EFSQLScripts.ConnectionString)</Value>
        <Tags>dbfullsql</Tags>
        <Priority></Priority>
        <ExcludeFromSetParameter>false</ExcludeFromSetParameter>
      </MsDeployDeclareParameters>
    </ItemGroup>

    <CreateParameterFile
      Parameters="@(MsDeployDeclareParameters)"
      DeclareSetParameterFile="$(_MSDeployParametersFilePath)"
      IncludeDefaultValue="True"
      OptimisticParameterDefaultValue="$(EnableOptimisticParameterDefaultValue)"
      SetParameterFile="$(_MSDeploySetParametersFilePath)"
      GenerateFileEvenIfEmpty="True" />
  </Target>
Run Code Online (Sandbox Code Playgroud)

似乎不支持自定义部署参数。同样,<Target Name="_CreateManifestFiles">目标似乎禁止定制。

WPP(Web Publishing Pipeline - 以前的实现)很笨拙,但是有关于如何自定义它的文章/博客文章。使用 ASP.NET Core,没有提到自定义或扩展部署过程,我可以找到。我确实在 ASP.NET Publishing 上找到了 Channel 9 Video,但它似乎已经过时了 - 它适用于 VS 2017,使用 project.json 和用于部署的 powershell 脚本,而且它似乎已被废弃以支持 MSBuild 目标。

我也确实找到了https://github.com/aspnet/websdk/blob/dev/README.md#microsoftnetsdkpublish,其中记录了可以更改的 msdeploy 设置的几个部分,但我仍然声明不支持用于延长管道。

我将缺乏可用信息解释为“自己解决”,这在处理 MSBuild 和 MSDeploy 时具有挑战性。有没有人成功地为 ASP.NET Core webapps 定制部署管道?