【问题标题】:TFS Build Website deployment package web.config transformation not workingTFS 构建网站部署包 web.config 转换不起作用
【发布时间】:2025-12-10 03:05:01
【问题描述】:

所以我尝试使用 TFS Build 为我的 3 个环境(ST、UAT、Prod)生成部署包。 这就是我在本地成功生成包的方法。 http://social.msdn.microsoft.com/Forums/en-US/tfsbuild/thread/74bb16ab-5fe6-4c00-951b-666afd639864/

所以我的本地机器将生成 acive 配置的包,一切都很好。这是我的构建定义: /p:DeployOnBuild=true;DeployTarget=包 我在 Projects To Build 中运行我的解决方案文件和 Web 部署项目。

它使用 ST、UAT 和 PROD 创建相应的文件夹。在其中的每一个中都有一个 _PublishedWebsites 文件夹。此文件夹有 2 个文件夹。

1) MydeploymentProject - 它包含转换后的 web.config 2) MyDeploymentProject_Package - 包含 Package 文件夹内容以及 zip 文件和 setparameters 文件。在这里,一切都没有改变。但如果我检查 TFS 服务器上的 TempBuildDir,它确实包含转换后的配置。

当比较本地和服务器上的日志时,我发现在我的本地转换文件更新并创建包之后,而在 TFS 上,AfterBuild 目标被称为转换完成并到此结束。

这是我的本地日志 由于错误条件,已跳过目标“WPPCopyWebApplicaitonPipelineCircularDependencyError”; ($(WPPCopyWebApplicaitonPipelineCircularDependencyError)) 被评估为 (False)。 在项目“C:\TAX-IT\Main\Source\TDDB\TDDB_deploy2”的文件“C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets”中定位“ProcessItemToExcludeFromDeployment” \TDDB_deploy2.wdproj”(目标“PipelineCollectFilesPhase”取决于它): 在项目“TDDB_deploy2.wdproj”中完成构建目标“ProcessItemToExcludeFromDeployment”。 在项目“C:\TAX-IT\Main\Source\TDDB\TDDB_deploy2”的文件“C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets”中定位“GetProjectWebProperties” \TDDB_deploy2.wdproj”(目标“PipelineCollectFilesPhase”取决于它): 使用程序集“C:\Program Files\MSBuild\Microsoft\WebDeployment\v10.0\....\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll”中的“GetProjectProperties”任务。 任务“GetProjectProperties”

我不确定出了什么问题。 我还在构建服务器上安装了 VS2010、web deploy 2.0 和 3.0 以及 web 部署工具。

任何人都遇到过这个问题并解决了。 请帮忙。

谢谢

【问题讨论】:

    标签: web-config transformation


    【解决方案1】:

    疯狂编码器,

    根据我从您的描述中收集到的信息,您的所有设置都正确。似乎您只是缺少“配置”参数。当您运行构建定义时,它会使用“构建的配置”参数中指定的配置。如果您想构建多个配置(就像您建议的那样),您需要定义多个配置。我的一个问题是:当您查看 TFS 构建过程的日志时,您是否看到构建了多个配置,还是只看到一个?如果您只看到一个,那么您没有定义所有配置来转换配置文件。根据您的描述,您需要在构建定义配置中看到类似这样的内容:

    如果您不想部署到网络服务器,可以在此处停止阅读,不必继续阅读。


    如果您选择使用 TFS 构建定义部署到 Web 服务器,则需要在某处拥有目标 Web 服务器,并且还需要在该服务器上安装和配置 Web Deploy v2/v3 .

    当您使用 TFS 构建定义进行部署时,转换发生在部署时,而不是在打包期间(部署之前)。它可能会在某处打包转换后的配置,但实际上不会转换与网站捆绑的配置。我能够使部署真正使用转换后的配置的唯一方法是当我在 MSBUILD args 中指定了一个网站时。这是我的 MSBUILD 参数的示例:

    /p:DeployOnBuild=True /p:DeployTarget=MSDeployPublish /p:MSDeployPublishMethod=RemoteAgent /p:MsDeployServiceUrl=MyWebServer/MsDeployAgentService /p:DeployIisAppPath="MyWebsite as named in IIS"  /p:UserName=MyDomain\MyWebDeployUser /p:Password=MyWebDeployPassword
    

    如果您不希望 MSBUILD 进行实际部署(我不希望这样做,因为您的部署过程与 TFS 相关联),您可以在构建过程之后进行部署并使用 the CTT Project, found on codeplex。此工具执行与 MSBUILD 完全相同的转换,但它还包括参数化设置的功能,因此您可以定义环境类(例如,3 个 QA 环境、2 个暂存环境等)并仍然使用该类的相应转换的环境。

    【讨论】:

    • 感谢 jarrettcoggin。我已经指定了 3 种配置。因此,它创建了适当的文件夹(ST、UAT、PROD),并在放置文件夹(整个网站所在的位置)中创建了转换后的 web.configs,并创建了一个带有 setParamters.xml 的包文件夹,其中包含开发配置设置和包含未转换 web.config 的 zip 文件。当我在本地执行“构建部署包”时,该包的 setParameters.xml 具有相应的环境连接字符串设置。我检查了从我机器上的安装到文件夹访问权限的所有内容。它只是不起作用