Как запустить задачу преобразования app.config перед PostBuildEvents? - PullRequest
2 голосов
/ 26 июля 2011

У меня есть консольное приложение, которое использует строку подключения к базе данных, которая определена в app.config.У меня есть несколько преобразований для изменения строки в зависимости от конфигурации сборки.

У меня также есть несколько событий после сборки, которые копируют app.config в выходные данные других проектов. Проблема в том, что события после сборки запускаются первыми, и я копирую нетрансформированный файл app.config. Позже запускается задача преобразования и применяется преобразование (так что я знаю, что оно работает).Я использую с Visual Studio 2010 и .NET 4.

В настоящее время действия [1], [ 3 ], [ 2 ], мне нужно изменить порядоких в [1], [2], [3]

1) Build
2) Выполнить преобразование
3) Выполнить событие после сборки

Вот мое преобразование из.csproj

<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll" />
  <Target Name="Transformation" Condition="exists('app.$(Configuration).config')" >
    <TransformXml Source="app.config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" Transform="app.$(Configuration).config" />
    <ItemGroup>
      <AppConfigWithTargetPath Remove="app.config" />
      <AppConfigWithTargetPath Include="$(IntermediateOutputPath)$(TargetFileName).config">
        <TargetPath>$(TargetFileName).config</TargetPath>
      </AppConfigWithTargetPath>
    </ItemGroup>
  </Target>

А это мои события после сборки

<PropertyGroup>
    <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
  </PropertyGroup>

 <PropertyGroup>
    <PostBuildEvent>copy $(ProjectDir)app.config $(OutDir)\TH.Presentation.LocalAgent\$(TargetFileName).config
copy $(ProjectDir)app.config $(OutDir)\TH.Services\$(TargetFileName).config</PostBuildEvent>
  </PropertyGroup>

Любая помощь будет принята с благодарностью

Ответы [ 2 ]

1 голос
/ 26 апреля 2012

Вместо того, чтобы использовать событие посткомпоновки для копирования файлов, вы можете скопировать их как часть цели Transformation.

Используйте задачу прямо перед этим в приведенном выше XML. Смотри http://msdn.microsoft.com/en-us/library/3e54c37h.aspx

1 голос
/ 26 апреля 2012

Если нет способа изменить их порядок, вы можете объединить их.Выполните трансформацию внутри событий после сборки (вверху).Однако в синтаксисе командной строки нет хороших методов преобразования xml (о которых я знаю).Вы можете сделать так, чтобы он вызывал ваш собственный исполняемый / пакетный файл XML-преобразования, передавая ему ваше имя файла и имя преобразования в качестве параметров.

Если вы не хотите создавать свою собственную утилиту, там есть много там

...