Возможно, это не совсем тот ответ, который вы ищете, но ранее я пытался найти правильный файл app.config в проекте установки. У меня есть файл msbuild TFSBuild.proj, который использует преобразования. Преобразования SlowCheetah, я думаю, используют ту же задачу msbuild, но я могу ошибаться. SlowCheetah, безусловно, обеспечивает более полезный пользовательский интерфейс при работе с файлами преобразования. Мой файл сборки использует немного другой подход. В конце автоматизированной сборки я хотел создать установщики для каждой целевой среды развертывания. Я использую несколько расширений msbuild, в том числе задачу сборки TransformXml - не все требуется для следующего, но FWIW это импорт:
<!-- import extensions -->
<Import Project="$(MSBuildExtensionsPath)\ExtensionPack\MSBuild.ExtensionPack.tasks"/>
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>
<UsingTask TaskName="TransformXml"
AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>
У меня определены следующие среды:
<ItemGroup>
<!-- target deployment environments -->
<Configs Include="Prod" />
<Configs Include="Staging" />
<Configs Include="Test" />
</ItemGroup>
Тогда стандартная цель AfterCompileSolution содержит вызов цели, который генерирует установщик для каждой среды:
<Target Name="AfterCompileSolution">
<!-- Create installers for target deployment environments -->
<CallTarget Targets="MyProject" />
</Target>
<Target Name="MyProject" Outputs="%(Configs.Identity)">
<ItemGroup>
<MyProjectTempConfig Include="$(SolutionRoot)\MyProjectService\Temp.config" />
<MyProjectConfigFrom Include="$(SolutionRoot)\MyProjectService\App.%(Configs.Identity).config" />
<MyProjectConfigTo Include="$(SolutionRoot)\MyProjectService\App.config">
<Attributes>ReadOnly</Attributes>
</MyProjectConfigTo>
</ItemGroup>
<Message Text="MyProject - Target environment: %(Configs.Identity)" />
<!-- transform app.config using appropriate -->
<Copy SourceFiles="@(MyProjectConfigTo)"
DestinationFiles="@(MyProjectTempConfig)"
OverwriteReadOnlyFiles="true"
ContinueOnError="true"
Condition="!Exists(@(MyProjectTempConfig))"/>
<File TaskAction="RemoveAttributes" Files="@(MyProjectConfigTo)"/>
<TransformXml Source="@(MyProjectTempConfig)"
Transform="@(MyProjectConfigFrom)"
Destination="@(MyProjectConfigTo)" />
<!-- run setup -->
<Exec Command=""$(ProgramFiles)\Microsoft Visual Studio 10.0\Common7\IDE\devenv" "$(SolutionRoot)\MyProject.sln" /build Release /project MyProjectService.Setup"/>
<!-- rename output for target deployment environment -->
<Copy SourceFiles="$(SolutionRoot)\MyProjectService.Setup\Release\MyProjectService.msi"
DestinationFiles="$(OutDir)\%(Configs.Identity)_MyProjectService.msi"
OverwriteReadOnlyFiles="true"
ContinueOnError="true"/>
</Target>