使用SlowCheetah的app.config转换与安装项目

时间:2012-01-26 22:05:40

标签: visual-studio-2010 installation app-config setup-project slowcheetah

我正在使用SlowCheetah XML Transforms扩展来处理与app.config类似的web.config转换。那部分效果很好。

我添加了一个安装项目并将其配置为包含第一个项目的项目输出。我注意到,当我运行安装程序时,它安装了未转换的app.config。查看主输出输出(比如快10倍),我注意到它在Project\bin\Debug\Project.exe中找到了二进制文件,但是Project.exe.config来自Project\app.config而不是Project\bin\Debug\Project.exe.config。< / p>

我可以从主输出中排除app.config,并将路径硬编码到特定配置的app.config(Project\bin\Debug\Project.exe.config),但是无论配置是什么,我都会获得相同的app.config我曾经建造它。

是否有在安装项目中获取相应转换的app.config的解决方法?

2 个答案:

答案 0 :(得分:2)

您好我们计划在未来几天发布一个具有ClickOnce支持的新版本。如果你需要在修改之前构建一个add in,请联系我,我可以把它告诉你。

答案 1 :(得分:1)

这可能不是您正在寻找的答案,但我之前已经尝试过如何将正确的app.config文件添加到安装项目中。我有一个使用转换的TFSBuild.proj msbuild文件。 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="&quot;$(ProgramFiles)\Microsoft Visual Studio 10.0\Common7\IDE\devenv&quot; &quot;$(SolutionRoot)\MyProject.sln&quot; /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>