Итак, я создал профиль публикации для своего веб-приложения.Я сделал это с графическим интерфейсом в VS 2017 Enterprise.Затем я нашел пример того, как изменить pubxml, чтобы он сжал все выходные файлы.В конце концов я получил следующее:
<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>
<PrecompileBeforePublish>True</PrecompileBeforePublish>
<EnableUpdateable>True</EnableUpdateable>
<DebugSymbols>False</DebugSymbols>
<WDPMergeOption>DonotMerge</WDPMergeOption>
<ExcludeApp_Data>False</ExcludeApp_Data>
<publishUrl>bin\Release\Publish</publishUrl>
<DeleteExistingFiles>True</DeleteExistingFiles>
<Configuration>Release</Configuration>
</PropertyGroup>
<Target Name="ZipPublishOutput" AfterTargets="GatherAllFilesToPublish">
<Exec Command='powershell -nologo -noprofile -command "compress-archive -force -path $(WPPAllFilesInSingleFolder)\* -destinationpath $(publishUrl).zip"' />
</Target>
</Project>
Это прекрасно работает, если я делаю публикацию через Visual Studio.Тем не менее, я пытался все, что я могу придумать, чтобы заставить это работать в MSBuild, но не повезло.
Вот пример того, что я думаю, должно работать:
"C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Enterprise \ MSBuild \ 15.0 \ Bin \ MSBuild.exe" WebApp.csproj / nologo / p: конфигурация = выпуск / p: DeployOnBuild = true / p: PublishProfile =ReleasePublish
И для справки, вот версия MSBuild:
Microsoft (R) Build Engine версия 15.9.20 + g88f5fadfbe для .NET Framework
Я знаю, что MSBuild находит профиль pubxml, потому что я могу внести изменения в настройки, например publishUrl, и эти изменения вступят в силу при следующем запуске MSBuild.То, что не работает, - это цель ZipPublishOutput.И даже запуск MSBuild с многословной диагностикой показывает, что GatherAllFilesToPublish никогда не запускается, что означало бы, что моя цель не будет работать.
Я нашел много разных предложений, и, похоже, ничего не помогает.Похоже, что многие решения, которые я нашел, заключались в том, что MSBuild не находил pubxml, но здесь дело не в этом.
Итак, GatherAllFilesToPublish является чем-то специфичным для Visual Studio, и поэтому MSBuild не знает об этом?Это похоже на то, как оно действует.