我可以详细说明选项#1/#3 并比较它们。之前的回复是不准确的说你必须用PackageWeb构建多次,你只需要构建一次。
选项 1:Parameters.xml 和 SetParameters.xml
在这种方法中,您将在您的 Web 项目中创建一个 parameters.xml 文件,该文件将声明其他 Web 部署参数。
构建 Web 部署包时,将在包中创建在 parameters.xml 中声明的参数。创建此 Web 部署包时,web.config 文件将根据构建配置进行转换(现在也可能是特定于配置文件的转换)。
您可以使用该包和 setparameters.xml 来发布指定 Web 部署参数值的包。您可以创建不同的 setparameters.xml 文件并将其与同一个包一起使用以发布到多个目标。要使用此技术发布,您可以使用 VS 生成的 deploy.cmd 或使用正确的参数集调用 msdeploy.exe。
选项 3:PackageWeb
PackageWeb 扩展了包过程,因此当您创建 Web 部署包时,包中包含 web.config 转换以及可以执行转换的程序集。
除此之外,当您创建 Web 部署包时,还会生成一个 publish-interactive.ps1 文件。你可以使用这个文件来发布你的包。它会提示您;要应用的 web.config 转换、Web 部署参数值和 Web 部署端点信息本身。当您运行发布时,您提供的值将保存到publish-configuration.ps1.readme
. 您可以删除 .readme 并且 publish-interactive.ps1 将使用该文件中的值来自动发布。您还可以指定要用于设置的文件。
如果您在 VS 创建 web 部署包时创建了 parameters.xml 文件,它将导致 web 部署参数包含在包中。PackageWeb 会选择这些并提示您。
那么这些方法之间有什么区别呢?
使用选项#1,进入包的 web.config 已经被转换。您将没有机会再次转换文件。使用这两种方法,您都可以指定 Web 部署参数值,以便满足您的需求。如果您将大块的 XML 从一个环境修改到另一个环境,那么 web.config 转换可能会有所帮助。所以 PackageWeb 可能是更好的选择。
使用选项#1,您必须手动创建 SetParameters.xml 文件。使用 PackageWeb,您可以使用 WhatIf 选项运行该过程。系统将提示您输入值,它会为您创建设置文件。
您可以轻松地自动化这两种方法。PackageWeb 本质上建立在parameters.xml/setparameters.xml 技术之上,并提供了一个超集的功能。
如果您想用最少的移动部件使事情尽可能简单,我会推荐选项 #1,因为如果需要,您可以直接调用 msdeploy.exe。
如果您想简化发布的自动化并且您更喜欢 PowerShell 而不是标准命令提示符,那么请尝试 PackageWeb。
我在http://sedodream.com/2012/03/14/PackageWebUpdatedAndVideoBelow.aspx在 PackageWeb 上有一个 5 分钟的视频。如果您要发布 Web 部署包,我鼓励你们尝试一下。如果它不能满足您的需求,请告诉我,因为我们以后可能会以更正式的方式使用我们在 PackageWeb 中学到的东西。