我正在尝试通过TFS将一个包含两个网站的项目部署到 Visual Studio 2012 解决方案中,并作为一项构建的一部分。我们已经处于有两个不同的 Web 服务器,
我们希望向每个服务器部署不同的连接字符串,以便它们可以连接到不同的数据库。我们已在 Visual Studio 的开发机上测试了解决方案,在所有配置下,当任何 Web 项目发布时,检查 Web 服务器时,
在使用默认的 Debug 解决方案配置的
对于下一个配置(
然而,当我们使用MSBuild参数运行
当我们查看构建日志和输出目录时,我们可以在
问题的关键在于发布到Web服务器上的
现在我尝试从开发机器上的命令行运行msbuild,以便了解为什么会发生这种情况。
通过剥离通过TFS构建发送的MSBuild参数,我可以看到这不会转换Web配置:
我可以修改这个项目文件并使用MSBuild直接构建。我发现下面的命令确实会为发布的应用程序转换
这个问题在TFS构建中运行会很困难,因为有多个项目,其中一些是网站,其他是Windows服务器等。
我该如何使用第一个命令,但修改它,使其正确转换Web项目?
正如您所看到的,我创建了一些发布配置文件,因此可能可以在MSBuild参数以及TFS构建中使用。
PS:我们正在使用Visual Studio 2012,TFS 2010,Windows 2008R2用于服务器和Windows 7用于开发机器。
WIP
(进行中)和 DEV
的阶段。我们希望向每个服务器部署不同的连接字符串,以便它们可以连接到不同的数据库。我们已在 Visual Studio 的开发机上测试了解决方案,在所有配置下,当任何 Web 项目发布时,检查 Web 服务器时,
web.config
连接字符串都会按预期进行转换。在使用默认的 Debug 解决方案配置的
WIP
服务器上,构建正常工作。TFS 构建中的配置是 Any CPU|Debug。对于下一个配置(
DEV
),我们确信 Web 项目都通过 Visual Studio 2012 发布到 Web 服务器,并且 web.config
文件得到了转换。然而,当我们使用MSBuild参数运行
DEV
构建时,我们注意到没有进行任何转换。我们已将配置发送到生成项部分的“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
是来自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项目?
正如您所看到的,我创建了一些发布配置文件,因此可能可以在MSBuild参数以及TFS构建中使用。
PS:我们正在使用Visual Studio 2012,TFS 2010,Windows 2008R2用于服务器和Windows 7用于开发机器。