5

我正在尝试通过TFS在 Visual Studio 2012 解决方案中部署一个包含两个网站的项目,作为构建的一部分。我们现在有两个不同的 Web 服务器,WIP(正在进行中)和DEV.

我们希望将不同的连接字符串部署到任一服务器,以便它们可以连接到不同的数据库。我们已经在使用 Visual Studio 的开发机器上测试了我们的解决方案,并且对于所有配置,当发布任何 Web 项目时,web.config当我们检查 Web 服务器时,连接字符串会按预期进行转换。

该构建在WIP使用默认调试解决方案配置的服务器上运行良好。TFS Build 中的配置是 Any CPU|Debug。

对于下一个配置 ( DEV),我们确定 Web 项目都通过 Visual Studio 2012 发布到 Web 服务器并且web.config文件转换。

但是,当我们使用MSBuildDEV参数运行构建时,我们注意到没有发生任何转换。我们已将构建项目的构建部分中的配置发送到:任何 CPU|Dev。

/p:VisualStudioVersion=10.0 /p:DeployOnBuild=True;PublishProfile=app.ui.dev.pubxml /p:DeployTarget=MsDeployPublish /p:MsDeployServiceUrl=https://server-dev-hrtech:8172/MSDeploy.axd /p:CreatePackageOnPublish=True /p:MSDeployPublishMethod=WMSVC  /p:AllowUntrustedCertificate=True /p:Username=username /p:Password=password /p:_WPPCopyWebApplication=True /p:PipelineDependsOnBuild=False

当我们查看构建日志和输出目录时 - 我们可以在目录中看到已编译的程序集,obj/Debug而不是obj/Dev我们预期的目录。在日志中,我们可以清楚地看到/p:Configuration="Dev"我们所期望的。

底线是web.config最终在 Web 服务器上发布的文件是web.config来自 Debug 配置的默认文件(即未转换)。就好像 MSBuild 无法看到在解决方案的参数中传递的配置参数。

我现在尝试在我的开发机器上从命令行运行 msbuild,以尝试了解为什么会发生这种情况。

通过剥离通过 TFS 构建发送的 MSBuild 参数,我可以看到这不会改变 Web 配置:

msbuild "app-no database.sln" /t:app_ui:Rebuild /P:TransformConfigFiles=true /p:Configuration=Dev  /p:Platform="Any CPU" /p:MSDeployServiceUrl=https://app-dev-hrtech:8172/MSDeploy.axd /p:Username=username /p:Password=password /p:DeployOnBuild=True /p:PublishProfile=app.ui.dev.pubxml /p:VisualStudioVersion=11.0 > build.log

我可以修改它并使用 MSBuild 直接构建项目文件。我发现下面的命令确实转换了web.config已发布应用程序的文件:

msbuild app.ui\app.ui.csproj /p:Configuration=Dev  /p:MSDeployServiceUrl=https://app-dev-hrtech:8172/MSDeploy.axd /p:Username=username /p:Password=password /p:DeployOnBuild=True /p:PublishProfile=app.ui.dev.pubxml /p:VisualStudioVersion=11.0 /p:AllowUntrustedCertificate=True > build.log

问题是这将很难作为 TFS 构建的一部分运行,其中它们是多个项目,其中一些用于网站,另一些用于 Windows 服务器等。

如何使用第一个命令,但对其进行修改以正确转换 Web 项目?

如您所见,我创建了一些发布配置文件,因此它们可能会在 MSBuild 参数以及 TFS 构建中使用。

PS:我们在服务器上使用 Visual Studio 2012、TFS 2010、Windows 2008R2,在开发机器上使用 Windows 7。

4

4 回答 4

1

我遇到过这个问题,关于如何通过发布配置文件发布网站,这篇文章是我见过的最好的一篇。

对于您的情况,您似乎需要使配置文件名称与配置名称相同,例如使用 Dev.pubxml 和 Web.Dev.config。

于 2013-09-10T02:56:34.740 回答
0
/p:DeployOnBuild=True;PublishProfile=app.ui.dev.pubxml

我不认为 .pubxml 应该在配置文件的末尾。应该是这样的

/p:DeployOnBuild=True;PublishProfile=app.ui.dev
于 2014-02-10T12:25:28.593 回答
0

我刚遇到这个问题。检查了 MSBuild 日志,检查了制作本地 ZIP 包,检查了 Web 部署推送到远程 IIS,它始终使用默认配置文件!

原来,我正在查看的用于检查我的 QA 设置的 XML 块缺少该xdt:Transform="Replace"属性!

希望这可以帮助某人。

于 2014-10-16T09:20:49.797 回答
0

看起来 TFS 2010 Build 默认不调用Transform MSBuild 任务。您需要编辑 TFS 构建定义以添加调用它的新活动或编辑项目文件来执行此操作。

堆栈溢出问题TFS Build 未按预期转换 web.config应该可以帮助您添加新活动和博客文章Integrating Web Config Transformations with TFS Build以更改项目文件。

于 2013-07-17T13:53:55.077 回答