Как расширить конвейер msdeploy/ публикации для приложений.NET Core
Веб-приложения старого стиля /.NET Framework в Visual Studio имеют конвейер публикации, который можно настраивать. Например, Parameters.xml
файл может быть указан, например, так:
<PropertyGroup>
<WebAppPackageConfigDir Condition=" '$(WebAppPackageConfigDir)' == '' ">$(MSBuildProjectDirectory)\Package</WebAppPackageConfigDir>
<ProjectParametersXMLFile>$(WebAppPackageConfigDir)\Parameters.xml</ProjectParametersXMLFile>
</PropertyGroup>
так что при сборке пакета MSDeploy определенные в нем параметры MSDeploy включаются в пакет. Трубопровод веб-обработки (в основном определяется в C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\VisualStudio\v15.0\Web\Microsoft.Web.Publishing.targets
) поддерживает настройку пакета MSDeploy несколькими способами - например, параметры пакета могут быть определены в файле или в MSBuild <ItemGroup>
,
В веб-приложениях в стиле SDK (например, в веб-приложениях ASP.NET Core) используется "новый" конвейер публикации, начиная, например, с 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.targets
за PublishProtocol=MSDeploy
или же .\Microsoft.NET.Sdk.Publish.MSDeployPackage.targets
за 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>
Похоже, что нет поддержки для настройки параметров развертывания. Точно так же <Target Name="_CreateManifestFiles">
Похоже, что цель запрещает настройку.
WPP (конвейер веб-публикаций - предыдущая реализация) является / был неуклюжим, но были статьи / посты в блогах о том, как его настроить. В ASP.NET Core нет упоминания о настройке или расширении процесса развертывания, который я могу найти. Я нашел видео Channel 9 по публикации ASP.NET, но оно выглядит устаревшим - оно применяется к VS 2017 с сценариями project.json и powershell, используемыми для развертывания, и похоже, что оно было отменено в пользу целей MSBuild.
Я также нашел https://github.com/aspnet/websdk/blob/dev/README.md#microsoftnetsdkpublish, который документирует некоторые части настроек msdeploy, которые могут быть изменены, но я все равно утверждаю, что поддержка отсутствует для расширения трубопровода.
Я понимаю, что отсутствие доступной информации означает "разберись сам", что сложно при работе с MSBuild и MSDeploy. Кто-нибудь имел успехи в настройке конвейера развертывания для веб-приложений ASP.NET Core?