MSBuild изменяя свойство publishUrl в файле pubxml, выдает ошибку при публикации
В VS2017 я запускаю этот файл pubxml.
<?xml version="1.0" encoding="utf-8"?>
<!--
This file is used by the publish/package process of your Web project. You can customize the behavior of this process
by editing this MSBuild file. In order to learn more about this please visit http://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Date>$([System.DateTime]::Now.ToString(yyyyMMdd))</Date>
<WebPublishMethod>FileSystem</WebPublishMethod>
<LastUsedBuildConfiguration>Prod</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish />
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
<ExcludeApp_Data>False</ExcludeApp_Data>
<Major>0</Major>
<Minor>1</Minor>
<Build>2</Build>
<Publish>c:\</Publish>
<publishUrl>$(Publish)</publishUrl>
<DeleteExistingFiles>True</DeleteExistingFiles>
</PropertyGroup>
<Target Name="GetBuildUrl">
<PropertyGroup>
<In>$([System.IO.File]::ReadAllText('$(MSBuildProjectDirectory)\Properties\AssemblyInfo.cs'))</In>
<Pattern>^\s*\[assembly: AssemblyVersion\(\D*(\d+)\.(\d+)\.(\d+)</Pattern>
<Major>$([System.Text.RegularExpressions.Regex]::Match($(In), $(Pattern), System.Text.RegularExpressions.RegexOptions.Multiline).Groups[1].Value)</Major>
<Minor>$([System.Text.RegularExpressions.Regex]::Match($(In), $(Pattern), System.Text.RegularExpressions.RegexOptions.Multiline).Groups[2].Value)</Minor>
<Build>$([System.Text.RegularExpressions.Regex]::Match($(In), $(Pattern), System.Text.RegularExpressions.RegexOptions.Multiline).Groups[3].Value)</Build>
<Publish>$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), _ReleaseRoot.txt))\FlightmapReleases\Releases\Flightmap $(Major).$(Minor)\Prod\$(Date) ($(Major).$(Minor).$(Build))\</Publish>
<publishUrl Condition=" '$(Publish)' != '' ">$(Publish)</publishUrl>
<publishUrl Condition=" '$(Publish)' == '' and '$(LastUsedBuildConfiguration)'!='' ">$(LastUsedBuildConfiguration)</publishUrl>
</PropertyGroup>
</Target>
<Target Name="BeforeBuild" DependsOnTargets="GetBuildUrl">
<Message Importance="High" Text="|" />
<Message Importance="High" Text=" =================================================================================================" />
<Message Importance="High" Text=" BUILD INFO " />
<Message Importance="High" Text=" Version [$(Major).$(Minor).$(Build)] found in [$(MSBuildProjectDirectory)\Properties\AssemblyInfo.cs] " />
<Message Importance="High" Text=" Build will be saved to [$(publishUrl)] " />
<Message Importance="High" Text=" =================================================================================================" />
<Message Importance="High" Text="|" />
</Target>
</Project>
Поскольку место публикации не находится в корне проекта, он ищет файл "_ReleaseRoot.txt" и устанавливает содержащую его папку как корневую. Цель обмена сообщениями дает правильные значения для всех свойств, поэтому я предполагаю, что это работает.
Когда я запускаю опубликовать сообщение это:
------ Build started: Project: Flightmap.Web, Configuration: Debug Any CPU ------
|
===================================================================
BUILD INFO
Version [5.4.0] found in [(correct project)\Properties\AssemblyInfo.cs]
Build will be saved to [(correct location)\Prod\20170413 (5.4.0)\]
===================================================================
Выглядит хорошо для меня. Затем начинается сборка, говоря
Connecting to c:\...
И это не удивительно заканчивается
Publish failed. Target file:///c:/.
Как я могу заставить это работать?
0 ответов
У меня была похожая проблема, и она была решена путем изменения csproj
файл:
from (может немного отличаться от вас, например v4):
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v14.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
изменился на
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v15.0\WebApplications\Microsoft.WebApplication.targets" Condition="true" />
Это с последней версией VS2017 (15.82) и MSBuild 15 (2019).