我试图通过TFS作为构建的一部分在Visual Studio 2012解决方案中部署双网站项目。我们处于两台不同的Web服务器WIP
(正在进行中)和DEV
的时间点。TFS/MSBuild构建/发布web部署不会转换web.config文件
我们希望将不同的连接字符串部署到任一服务器,以便它们可以连接到不同的数据库。我们已经使用Visual Studio在开发机器上测试了我们的解决方案以及所有配置,当任何Web项目发布时,当我们检查Web服务器时,web.config
连接字符串按预期进行了转换。
构建在使用默认调试解决方案配置的WIP
服务器上正常工作。 TFS Build中的配置是Any CPU | Debug。
对于下一个配置(DEV
),我们确信Web项目都通过Visual Studio 2012发布到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.config
,最终在Web服务器上是Debug配置(即未转换)的默认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 Build中用于MSBuild参数。
PS:我们正在使用Visual Studio 2012,TFS 2010,Windows 2008R2服务器和Windows 7用于开发机器。
奇怪。那么这解决了我的问题!我有一个名为“Deploy”的配置文件,我的配置名称是“Release”。 –