【问题标题】:MSDeploy all configuration [.config files] in one packageMS在一个包中部署所有配置[.config文件]
【发布时间】:2011-06-15 01:04:35
【问题描述】:

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

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

我想要实现的是在我们的企业环境中自动部署,其中开发团队无法访问将要部署的服务器。我们只需要交付带有预定义说明如何安装包的部署包。

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

【问题讨论】:

  • 看看下面解决的实现

标签: .net msbuild cruisecontrol.net nant msdeploy


【解决方案1】:

您可以使用以下解决方案来实现它。在这期间,我得到了我很久以来读过的最好的书之一的指导。这本书是由 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>

添加上述项目文件并将您的环境特定文件添加到文件夹中后,只需通过 msbuild 可访问命令行运行以下命令

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

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

【讨论】:

  • 您好,感谢您对本书的称赞。很高兴您发现它对您有所帮助。
  • 我很高兴,伙计,您对构建引擎有了深刻的了解,非常感谢您在知识共享方面所做的努力。书很好
  • 我不肯定,但您可能需要在 64 位环境中使用 MSBuildExtensionsPath32。
【解决方案2】:

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

【讨论】:

  • 我不会使用任何形式的安装程序来部署文件。基本上,我的目标是创建一个包[其中包含 Config 文件夹和 stage.config、test.config、production.config 文件]。
【解决方案3】:

我不是 100% 确定您在寻找什么。

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

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

【讨论】:

  • 我不会使用任何形式的安装程序来部署文件。基本上,我的目标是创建一个包[其中包含 Config 文件夹和 stage.config、test.config、production.config 文件]。我想我今天应该完成我的任务,很快就会发布答案
猜你喜欢
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-01
  • 2020-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多