如何扩展 .NET Core 应用的 msdeploy/发布管道

How to extend msdeploy/publishing pipeline for .NET Core apps

提问人:crimbo 提问时间:12/13/2017 更新时间:12/13/2017 访问量:658

问:

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

  <PropertyGroup>
    <WebAppPackageConfigDir Condition=" '$(WebAppPackageConfigDir)' == '' ">$(MSBuildProjectDirectory)\Package</WebAppPackageConfigDir>
    <ProjectParametersXMLFile>$(WebAppPackageConfigDir)\Parameters.xml</ProjectParametersXMLFile>
  </PropertyGroup>

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

在 SDK 样式的 Web 应用程序(例如 ASP.NET Core webapps)中,从 例如 .这将根据值(例如 for 或 for )拉入其他目标文件。这两个文件都将目标定义为: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.targetsPublishProtocol=MSDeploy.\Microsoft.NET.Sdk.Publish.MSDeployPackage.targetsPublishProtocol=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>

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

WPP(Web 发布管道 - 以前的实现)很笨拙,但有关于如何自定义它的文章/博客文章。在 ASP.NET Core 中,我找不到任何关于自定义或扩展部署过程的提及。我确实在 ASP.NET Publishing 上找到了一个第 9 频道视频,但它似乎已经过时了 - 它适用于 VS 2017,其中包含用于部署的 project.json 和 powershell 脚本,并且似乎已废弃以支持 MSBuild 目标。

我还找到了 https://github.com/aspnet/websdk/blob/dev/README.md#microsoftnetsdkpublish,它记录了可以更改的 msdeploy 设置的一些部分,但我仍然声明不支持扩展管道。

我将缺乏可用信息解释为“自己弄清楚”,这在处理 MSBuild 和 MSDeploy 时具有挑战性。是否有人成功自定义了 ASP.NET Core Web 应用的部署管道?

visual-studio-2017 asp.net-core-2.0 msdeploy webdeploy msbuild-wpp

评论

0赞 crimbo 3/31/2018
我创建了这个问题:github.com/aspnet/websdk/issues/278 - 但是还没有回应。

答: 暂无答案