我正在尝试通过TFS在Visual Studio2012解决方案中部署一个双网站项目,作为构建的一部分。我们现在有两个不同的web服务器,WIP (工作进行中)和DEV。
我们希望将不同的连接字符串部署到任一服务器,以便它们可以连接到不同的数据库。我们已经在使用Visual Studio的开发机器上测试了我们的解决方案,对于所有配置,当发布任何web项目时,当我们检查web服务器时,web.config连接字符串都会按照预期进行转换。
构建在使用默认调试解决方案配置的WIP服务器上工作得很好。TFS构建中的配置是Any CPU|Debug。
对于下一个配置(DEV),我们确定web项目既可以通过Visual Studio2012发布到web服务器,也可以转换为web.config文件。
但是,当我们使用MSBuild参数运行DEV构建时,我们注意到没有发生转换。我们已经将构建的Items to Build部分中的配置发送到: Any 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服务器上发布的web.config是调试配置中的默认web.config文件(即,未转换)。就好像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项目?
正如您所看到的,我已经创建了一些发布配置文件,因此在TFS构建中也可以在MSBuild参数中使用它们。
PS:我们使用Visual Visual Studio 2012,TFS 2010,Windows 2008R2作为服务器,Windows 7作为开发机器。
发布于 2013-09-10 10:56:35
我遇到过这个问题,关于如何通过发布配置文件发布网站,这个article是我见过的最好的一个。
对于您的情况,您似乎需要使配置文件名称与配置名称相同,例如使用Dev.pubxml和Web.Dev.config。
发布于 2013-07-17 21:53:55
看起来TFS2010构建默认不会调用Transform MSBuild任务。您需要编辑您的TFS构建定义,以添加一个调用它的新活动,或者编辑您的项目文件来完成此操作。
堆栈溢出问题应该可以帮助您添加新的acitivty和博客帖子,以便对项目文件进行更改。
发布于 2014-02-10 20:25:29
/p:DeployOnBuild=True;PublishProfile=app.ui.dev.pubxml我认为.pubxml不应该出现在简介的末尾。应该是这样的
/p:DeployOnBuild=True;PublishProfile=app.ui.devhttps://stackoverflow.com/questions/17697441
复制相似问题