Преобразования SlowCheetah для не-веб-приложений.config

Меня смущают быстрые темпы и потрясающая работа, проделанная Сайедом Хашими и компанией над SlowCheetah, в частности, может ли SlowCheetah преобразовывать файлы в сборке, а не просто в пакете и публикации.

У меня установлен SlowCheetah, и я могу автоматически генерировать экземпляры конфигурации сборки для app.config консольного приложения, над развертыванием которого я работаю с командой разработчиков. При сборке создается новый каталог «SlowCheetah» в каталоге $(ProjectDir)\obj\x86\$(BuildConfig). Каталог obj\x86\STAGE\SlowCheetah, например, содержит файл app.config с завершенным преобразованием, как показано при щелчке правой кнопкой мыши на преобразовании STAGE и выборе «Просмотр преобразований».

Однако каталог \bin\$(BuildConfig) содержит непреобразованный файл app.config, а также все шаблоны для каждого из преобразований $(BuildConfig) — вместо замены файла app.config в каталоге bin\x86\. STAGE с каталогом SlowCheetah.

Сборка завершается без ошибок.

Это ожидаемое действие или что-то все еще работает неправильно?

@sayed-ibrahim-hashimi Каждая $(конфигурация) имеет преобразование. Преобразования правильно отображаются при просмотре в Visual Studio и правильно преобразуются в каталоге \slowcheetah в дереве каталогов \obj. Примеры преобразований:

<?xml version="1.0" encoding="utf-8" ?>
<!-- For more information on using transformations see the web.config examples at http://go.microsoft.com/fwlink/?LinkId=214134. -->
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform
<connectionStrings>
<add name="Portal" connectionString="Data Source=transformtestserver.domain.local;Initial Catalog=TestDB;User Id=TestUser;Password=testpw1;" xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
<add name="DictionaryDatabase" connectionString="Data Source=transformtestserver.domain.local;Initial Catalog=TestDB;User Id=TestUser;Password=testpw2;" xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
<add name="LoggingDatabase" connectionString="Data Source=transformtestserver.domain.local;Initial Catalog=TestDB;User Id=TestUser;Password=testpw3;" xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>    
</connectionStrings>
</configuration>

Проблема может быть связана с конфигурацией Nuget/solution. Проект, над которым я работаю, является частью очень большого решения. У меня были трудности с установкой и работой SlowCheetah — в какой-то момент Nuget сказал, что SlowCheetah установлен, но каталог пакета решения не содержит SlowCheetah.

Я настроил обходной путь в TeamCity, чтобы получить преобразованный файл app.config из каталога \obj, но мне бы очень хотелось решить проблему, чтобы я мог развернуть SC для всей группы разработчиков. Есть ли подробный журнал, который мы можем просмотреть, чтобы указать детали?


person EHuggins    schedule 29.03.2013    source источник
comment
App.config должен преобразовываться при сборке. Можете ли вы дать более конкретные шаги воспроизведения здесь? Можете ли вы попробовать преобразование Insert, чтобы увидеть, изменяется ли исходный файл?   -  person Sayed Ibrahim Hashimi    schedule 30.03.2013
comment
В разделе ответов недостаточно места для подробного ответа, подробный ответ на ваш вопрос с примером преобразования добавлен к исходному сообщению, начиная с @sayed-ibrahim-hashimi.   -  person EHuggins    schedule 30.03.2013
comment
@stackoverflow.com/users/105999/sayed-ibrahim-hashimi Я включил диагностический вывод в VS2010 и увидел, что app.config преобразуется и сохраняется как application.exe.config, который содержит правильно преобразованный файл web.$(Condition).config. Я просмотрел информацию о файлах exe.config и увидел, что это правильное поведение для исполняемых файлов Windows. Я искал файл app.config. Похоже, я тратил ваше время на это - спасибо за отзывчивость и за то, что вы пишете потрясающие приложения и книги. Ваш MSBUILD 2-е изд. используется почти каждую неделю по той или иной причине.   -  person EHuggins    schedule 30.03.2013
comment
@EHuggins У меня очень похожая проблема. Хотя я ссылаюсь на дополнительные файлы конфигурации в моем файле App.config; и я хочу преобразовать содержимое этих файлов конфигурации. Как и вы, я вижу выходной файл Application.exe.config, но в нем просто есть исходная ссылка на указанные файлы конфигурации, а сами файлы никак не трансформируются. Любые идеи? Любые предложения высоко ценятся.   -  person WheretheresaWill    schedule 02.07.2013


Ответы (2)


Я столкнулся с той же проблемой.

Локальная компиляция в VS работает отлично, но при сборке Агента (TeamCity) волшебства преобразования не произошло!

Решение, которое я нашел относительно расположения элемента xml в файле proj

  <PropertyGroup Label="SlowCheetah">
    <SlowCheetahToolsPath>$([System.IO.Path]::GetFullPath( $(MSBuildProjectDirectory)\..\packages\SlowCheetah.2.5.10.3\tools\))</SlowCheetahToolsPath>
    <SlowCheetah_EnableImportFromNuGet Condition=" '$(SC_EnableImportFromNuGet)'=='' ">true</SlowCheetah_EnableImportFromNuGet>
    <SlowCheetah_NuGetImportPath Condition=" '$(SlowCheetah_NuGetImportPath)'=='' ">$([System.IO.Path]::GetFullPath( $(MSBuildProjectDirectory)\Properties\SlowCheetah\SlowCheetah.Transforms.targets ))</SlowCheetah_NuGetImportPath>
    <SlowCheetahTargets Condition=" '$(SlowCheetah_EnableImportFromNuGet)'=='true' and Exists('$(SlowCheetah_NuGetImportPath)') ">$(SlowCheetah_NuGetImportPath)</SlowCheetahTargets>
  </PropertyGroup>

Я заметил, что когда PropertyGroup находится над всеми элементами ItemGroup, MsBuild.exe, наконец, выполнил преобразование

person ari    schedule 06.01.2014
comment
Голосуйте не потому, что это был ответ для меня, а потому, что он указал на правильное место для поиска. Мне пришлось обновить путь в моем элементе <SlowCheetahTargets/>, чтобы он соответствовал местоположению моих файлов SlowCheetah. Расположение на сервере сборки отличается от того, что было по умолчанию на моей машине после установки SlowCheetah. - person Zarepheth; 13.06.2014

Найдите дубликат раздела SlowCheetahTargets — у меня была старая версия и более новая версия, и старая версия указывала на место, которого больше не существует в каталоге пакетов nuget.

Удалите всю группу свойств для более старого/дублированного раздела SlowCheetahTargets, и это должно исправить ситуацию.

person Tod Thomson    schedule 30.01.2014
comment
См. эту ветку (особенно последнее сообщение о форумах Properties-› SlowCheetah-›SlowCheetah.Transforms.targets . asp.net/t/1697459.aspx - person Tod Thomson; 30.01.2014