Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2012 TFS/MSBuild生成/发布web部署不会转换web.config文件_Visual Studio 2012_Tfs_Msbuild_Tfsbuild_Webdeploy - Fatal编程技术网

Visual studio 2012 TFS/MSBuild生成/发布web部署不会转换web.config文件

Visual studio 2012 TFS/MSBuild生成/发布web部署不会转换web.config文件,visual-studio-2012,tfs,msbuild,tfsbuild,webdeploy,Visual Studio 2012,Tfs,Msbuild,Tfsbuild,Webdeploy,作为构建的一部分,我正在尝试通过在Visual Studio 2012解决方案中部署一个双网站项目。我们现在有两个不同的web服务器,WIP(正在工作)和DEV 我们希望将不同的连接字符串部署到任一服务器,以便它们可以连接到不同的数据库。我们已经在带有Visual Studio的开发机器上测试了我们的解决方案,对于所有配置,当发布任何web项目时,检查web服务器时,web.config连接字符串将按预期进行转换 构建在使用默认调试解决方案配置的WIP服务器上运行良好。TFS构建中的配置是任何C

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

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

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

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

但是,当我们使用参数运行
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构建的一部分运行,因为TFS构建是多个项目,其中一些用于网站,另一些用于Windows服务器等

如何使用第一个命令,但修改它以使其正确地转换web项目

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


PS:我们正在使用VisualStudio2012、TFS 2010、Windows 2008R2作为服务器,Windows 7作为开发机器。

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


堆栈溢出问题应该可以帮助您添加新的活动和博客文章,以便对项目文件进行更改。

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

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

/p:DeployOnBuild=True;PublishProfile=app.ui.dev.pubxml
我不认为.pubxml应该在概要文件的末尾。 应该是这样的

/p:DeployOnBuild=True;PublishProfile=app.ui.dev

我只是有这个问题。检查了MSBuild日志,检查了生成本地ZIP包,检查了Web部署推送到远程IIS,并且始终使用默认配置文件

事实证明,我用来检查QA设置的XML块缺少
xdt:Transform=“Replace”
属性


希望这对某人有所帮助。

奇怪。这解决了我的问题!我有一个名为“Deploy”的配置文件,配置名为“Release”。