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

Dot*_*nfo 6 .net cruisecontrol.net msbuild nant msdeploy

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

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

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

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

Dot*_*nfo 8

您可以使用以下解决方案实现它.在这两者之间,我得到了我读过的最好的书之一的指导.本书由Sayed Ibrahim Hashimi和William Bartholomew撰写的"Inside the 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>
Run Code Online (Sandbox Code Playgroud)

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

msbuild transform.proj /t:TransformAll /p:FilesToTransform="Lab.config;Test.config;Live.config"
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.不要忘记购买/参考"Inside teh Microsoft Build Engine"一书.