MSDeploy在一个包中的所有配置[.config文件]

时间:2011-06-15 01:04:35

标签: .net msbuild cruisecontrol.net nant msdeploy

我们目前有4种不同的环境(Lab,Test,Stage,LIVE),我们使用Nant / CC.Net实现了自动部署。我正在调查并研究使用新的MSDeploy工具可以更有效地完成哪些工作。

我想要实现的是创建一个包含Configuration文件夹的包,在该文件夹中我们将拥有所有可能环境的所有不同配置文件(基本上添加所有配置转换文件)

我想要实现的是在我们的企业环境中自动部署,其中开发团队无法访问将要部署的服务器。我们只需要使用预定义的指令移交部署包,以了解如何安装软件包。

你能想到的最佳方法是什么。我们不使用TFS,并且不希望自动构建过程依赖于任何过程,除了MSDeploy或易于替换的东西。考虑使用MSBuild。

3 个答案:

答案 0 :(得分:8)

您可以使用以下解决方案来实现它。在这两者之间,我得到了我读过的最好的书之一的指导。本书是由Sayed Ibrahim Hashimi和William Bartholomew编写的“Microsoft Build Engine内部”。本书以精彩的方式完成细节。

创建一个msbuild proj文件,如下所示

<?xml version="1.0" encoding="utf-8"?>

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0" DefaultTargets="TransformAll">

  <UsingTask TaskName="TransformXml"  AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>

  <PropertyGroup>
    <DestDirectory>C:\Temp\DeployPackage\TRANSFORM_CONFIGS\</DestDirectory>
  </PropertyGroup>

  <ItemGroup>
    <TransformFiles Include="$(FilesToTransform)"/>
  </ItemGroup>

  <Target Name="TransformAll" DependsOnTargets="ValidateSettings">
    <MakeDir Directories="$(DestDirectory)"/>
    <TransformXml Source="..\web.config"
                  Transform="%(TransformFiles.Identity)"
                  Destination="@(TransformFiles->'$(DestDirectory)%(Filename).transformed.config')" />
  </Target>

  <Target Name="ValidateSettings">
    <Error Text="FilesToTransform cannot be empty"
           Condition=" '$(FilesToTransform)'=='' "/>
    <Error Text="Couldn't find transform file at [%(TransformFiles.Fullpath)]"
           Condition =" !Exists('%(TransformFiles.Fullpath)') "/>
  </Target>

</Project>

添加上述proj文件并在文件夹中添加环境特定文件后,只需通过msbuild可访问命令行运行以下命令行

msbuild transform.proj /t:TransformAll /p:FilesToTransform="Lab.config;Test.config;Live.config"

希望这会有所帮助。不要忘记购买/参考“Inside Microsoft Microsoft Build Engine”一书。

答案 1 :(得分:0)

一种可能性是自定义安装程序,以便显示的第一个对话框允许用户选择要安装的环境。根据该决定,相应的文件将被复制到安装目录并重命名。

答案 2 :(得分:0)

我不是100%肯定你在寻找什么。

您是否希望拥有一个根配置文件,该文件是从包含所有环境特定设置的“主”文件更新的?你应该看一下XmlPreProcessor http://xmlpreprocess.sourceforge.net/

除了Pedro的评论之外,您还可以在所有服务器上放置一个注册表项,说明服务器所属的环境。如果执行完全脚本化部署,则程序包将从该注册表项中获取环境,并为该环境生成正确的配置。拯救人类选择环境的步骤。