我正在使用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的解决方法?
答案 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=""$(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>