2017-02-16 8 views
0

Проблема:MSBuild конфигурации преобразования проблемы - папки Desination и Откат файл обратно в исходное состояние

DataFolder.config файл не возвращаясь назад к предыдущему состоянию (валютирования patch элемента). Кроме того, ни одно из настраиваемых конфигурационных преобразований файлов не вытесняется в папку назначения.

Что интересно, файл ConnectionStrings.config преобразуется обратно в исходное состояние после преобразования, но не DataFolder.config.

<Target Name="BeforeBuild"> 
    <!-- Web.config, ConnectionStrings.config, DataFolder.config 
     Duplicates original config files into a temp file --> 
    <Copy SourceFiles="Web.config" DestinationFiles="Web.temp.config" OverwriteReadOnlyFiles="True" /> 
    <Copy SourceFiles="$(ProjectDir)\App_Config\Include\zzz\DataFolder.config" DestinationFiles="$(ProjectDir)\App_Config\Include\zzz\DataFolder.temp.config" OverwriteReadOnlyFiles="True" /> 
    <Copy SourceFiles="$(ProjectDir)\App_Config\ConnectionStrings.config" DestinationFiles="$(ProjectDir)\App_Config\ConnectionStrings.temp.config" OverwriteReadOnlyFiles="True" /> 
    <!-- Tranforms config files --> 
    <TransformXml Source="Web.temp.config" Transform="Web.$(Configuration).config" Destination="Web.config" /> 
    <TransformXml Source="$(ProjectDir)\App_Config\Include\zzz\DataFolder.temp.config" Transform="$(ProjectDir)\App_Config\Include\zzz\DataFolder.$(Configuration).config" Destination="$(ProjectDir)\App_Config\Include\zzz\DataFolder.config" /> 
    <TransformXml Source="$(ProjectDir)\App_Config\ConnectionStrings.temp.config" Transform="$(ProjectDir)\App_Config\ConnectionStrings.$(Configuration).config" Destination="$(ProjectDir)\App_Config\ConnectionStrings.config" /> 
    </Target> 
    <Target Name="AfterPublish123" AfterTargets="MSDeployPublish"> 
    <!-- Overwrite transformed config files with the temps. 
     Delete temp files for Web.config, ConnectionStrings.config, DataFolder.config --> 
    <Copy SourceFiles="Web.temp.config" DestinationFiles="Web.config" OverwriteReadOnlyFiles="True" /> 
    <Delete Files="Web.temp.config" /> 
    <Copy SourceFiles="$(ProjectDir)\App_Config\Include\zzz\DataFolder.temp.config" DestinationFiles="$(ProjectDir)\App_Config\Include\zzz\DataFolder.config" OverwriteReadOnlyFiles="True" /> 
    <Delete Files="$(ProjectDir)\App_Config\Include\zzz\DataFolder.temp.config" /> 
    <Copy SourceFiles="$(ProjectDir)\App_Config\ConnectionStrings.temp.config" DestinationFiles="$(ProjectDir)\App_Config\ConnectionStrings.config" OverwriteReadOnlyFiles="True" /> 
    <Delete Files="$(ProjectDir)\App_Config\ConnectionStrings.temp.config" /> 
    </Target> 

DataFolder.config

<?xml version="1.0" encoding="utf-8"?> 
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/"> 
    <sitecore> 
    <sc.variable name="dataFolder"> 
     <patch:attribute name="value">#{sitecore.DataFolder}</patch:attribute> 
    </sc.variable> 
    </sitecore> 
</configuration> 

DataFolder.Release.config

<?xml version="1.0" encoding="utf-8" ?> 
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform" xmlns:patch="http://www.sitecore.net/xmlconfig/"> 
    <sitecore> 
    <sc.variable name="dataFolder" xdt:Locator="Match(name)" xdt:Transform="Replace"> 
     <patch:attribute name="value">c:\inetpub\wwwroot\fb822\Data</patch:attribute> 
    </sc.variable> 
    </sitecore> 
</configuration> 

После того, как опубликовать завершена, DataFolder.config элемент patch теперь имеет значение из DataFolder.Release.config значение элемента, которого оно не должно.

+0

Что такое DataFolder.Release.config? Он не ссылается ни на один из кода msbuild, который вы показываете. Когда вы говорите * ConnectionStrings.config преобразуется обратно в исходное состояние *, вы имеете в виду, что файл перезаписывается с помощью задачи копирования MsBuild в AfterPublish123? Вы проверили журнал, чтобы узнать, также ли происходит для DataFolder.config? Также запустите с подробным протоколированием, затем grep для «DataFolder.config», чтобы увидеть, какие задачи могут его изменить. – stijn

+0

'DataFolder.Release.config' - это выбранная конфигурация (т.е. -' $ (Конфигурация) '. Элементы' TransformXml' - это те, которые «преобразуют» исходный файл, используя созданные дублированные файлы «temp». –

ответ

0

Ошибка была AfterPublish недействительной задачей. Правильная задача для запуска «после публикации» является:

<Target Name="CustomPostPublishActions" AfterTargets="GatherAllFilesToPublish">

Обратите внимание, что атрибут Name не имеет значения, это может быть что угодно. Вот завершенная выход:

EDIT:

Добавление на мой вопрос, когда другие разработчики «построили» проект, и не публиковать его, преобразующие файлы будут изменять исходные конфиги, что не является желательным подходом. Поэтому, поскольку мы используем File Deploy как One-Click Publish, есть Target с именем CopyAllFilesToSingleFolderForPackage, который вызывается прямо перед вводом файлов в каталог.

<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" /> 
    <Target Name="CustomPrePublishActions" BeforeTargets="CopyAllFilesToSingleFolderForPackage"> 
    <!-- Duplicates original config files into a temp file --> 
    <Copy SourceFiles="Web.config" DestinationFiles="Web.temp.config" OverwriteReadOnlyFiles="True" /> 
    <Copy SourceFiles="$(MSBuildProjectDirectory)\App_Config\Include\zzz\DataFolder.config" DestinationFiles="$(MSBuildProjectDirectory)\App_Config\Include\zzz\DataFolder.temp.config" OverwriteReadOnlyFiles="True" /> 
    <Copy SourceFiles="$(MSBuildProjectDirectory)\App_Config\ConnectionStrings.config" DestinationFiles="$(MSBuildProjectDirectory)\App_Config\ConnectionStrings.temp.config" OverwriteReadOnlyFiles="True" /> 
    <Copy SourceFiles="$(MSBuildProjectDirectory)\App_Config\Include\zzzSites\Cinnabon\Cinnabon.CDN.config" DestinationFiles="$(MSBuildProjectDirectory)\App_Config\Include\zzzSites\Cinnabon\Cinnabon.CDN.temp.config" OverwriteReadOnlyFiles="True" /> 
    <Copy SourceFiles="$(MSBuildProjectDirectory)\App_Config\Include\zzzSites\Cinnabon\Cinnabon.SiteDefintion.config" DestinationFiles="$(MSBuildProjectDirectory)\App_Config\Include\zzzSites\Cinnabon\Cinnabon.SiteDefintion.temp.config" OverwriteReadOnlyFiles="True" /> 
    <!-- Tranforms config files --> 
    <TransformXml Source="Web.temp.config" Transform="Web.$(Configuration).config" Destination="Web.config" /> 
    <TransformXml Source="$(MSBuildProjectDirectory)\App_Config\Include\zzz\DataFolder.temp.config" Transform="$(MSBuildProjectDirectory)\App_Config\Include\zzz\DataFolder.$(Configuration).config" Destination="$(MSBuildProjectDirectory)\App_Config\Include\zzz\DataFolder.config" /> 
    <TransformXml Source="$(MSBuildProjectDirectory)\App_Config\ConnectionStrings.temp.config" Transform="$(MSBuildProjectDirectory)\App_Config\ConnectionStrings.$(Configuration).config" Destination="$(MSBuildProjectDirectory)\App_Config\ConnectionStrings.config" /> 
    <TransformXml Source="$(MSBuildProjectDirectory)\App_Config\Include\zzzSites\Cinnabon\Cinnabon.CDN.temp.config" Transform="$(MSBuildProjectDirectory)\App_Config\Include\zzzSites\Cinnabon\Cinnabon.CDN.$(Configuration).config" Destination="$(MSBuildProjectDirectory)\App_Config\Include\zzzSites\Cinnabon\Cinnabon.CDN.config" /> 
    <TransformXml Source="$(MSBuildProjectDirectory)\App_Config\Include\zzzSites\Cinnabon\Cinnabon.SiteDefintion.temp.config" Transform="$(MSBuildProjectDirectory)\App_Config\Include\zzzSites\Cinnabon\Cinnabon.SiteDefintion.$(Configuration).config" Destination="$(MSBuildProjectDirectory)\App_Config\Include\zzzSites\Cinnabon\Cinnabon.SiteDefintion.config" /> 
    </Target> 
    <Target Name="CustomPostPublishActions" AfterTargets="GatherAllFilesToPublish"> 
    <!-- Overwrite transformed config files with the temps. --> 
    <Copy SourceFiles="Web.temp.config" DestinationFiles="Web.config" OverwriteReadOnlyFiles="True" /> 
    <Copy SourceFiles="$(MSBuildProjectDirectory)\App_Config\Include\zzz\DataFolder.temp.config" DestinationFiles="$(MSBuildProjectDirectory)\App_Config\Include\zzz\DataFolder.config" OverwriteReadOnlyFiles="True" /> 
    <Copy SourceFiles="$(MSBuildProjectDirectory)\App_Config\ConnectionStrings.temp.config" DestinationFiles="$(MSBuildProjectDirectory)\App_Config\ConnectionStrings.config" OverwriteReadOnlyFiles="True" /> 
    <Copy SourceFiles="$(MSBuildProjectDirectory)\App_Config\Include\zzzSites\Cinnabon\Cinnabon.CDN.temp.config" DestinationFiles="$(MSBuildProjectDirectory)\App_Config\Include\zzzSites\Cinnabon\Cinnabon.CDN.config" OverwriteReadOnlyFiles="True" /> 
    <Copy SourceFiles="$(MSBuildProjectDirectory)\App_Config\Include\zzzSites\Cinnabon\Cinnabon.SiteDefintion.temp.config" DestinationFiles="$(MSBuildProjectDirectory)\App_Config\Include\zzzSites\Cinnabon\Cinnabon.SiteDefintion.config" OverwriteReadOnlyFiles="True" /> 
    <!-- Delete temp files --> 
    <Delete Files="Web.temp.config" /> 
    <Delete Files="$(MSBuildProjectDirectory)\App_Config\Include\zzz\DataFolder.temp.config" /> 
    <Delete Files="$(MSBuildProjectDirectory)\App_Config\ConnectionStrings.temp.config" /> 
    <Delete Files="$(MSBuildProjectDirectory)\App_Config\Include\zzzSites\Cinnabon\Cinnabon.CDN.temp.config" /> 
    <Delete Files="$(MSBuildProjectDirectory)\App_Config\Include\zzzSites\Cinnabon\Cinnabon.SiteDefintion.temp.config" /> 
    </Target> 
+0

Рад знайте, что вы разрешили эту проблему. Пожалуйста, отметьте свой ответ, который приносит пользу другим сообществам, у которых есть такая же проблема. –

Смежные вопросы