【发布时间】:2016-04-26 13:48:46
【问题描述】:
我有一个最近开始表现得很奇怪的 TFS 2013 构建定义。它已经完成了一年多的工作,没有任何问题。
它构建了 4 个不同的项目。其中两个是 asp.net mvc/webapi 项目,它们也通过 msdeploy 部署到同一 QA 登台 Web 服务器上的两个独立网站。构建配置为使用 Release|Any CPU
当构建运行时,使用 ApplyVersionToAssemblys powershell 脚本设置 dll 版本。
在构建文件夹中,所有程序集都有正确的版本。但是在其中一个部署的网站中,其中一个 dll 文件“WebUI.dll”的版本号为 1.0.0.0,即与构建目录中的相同 dll 不同,即 4.0.buildnumber
部署的“WebUI.dll”似乎也是在 Debug 模式下构建的,因为某些按钮和操作仅在定义 DEBUG 时才会显示。
如果我从构建目录甚至 PublishedWebsites 目录复制构建的 WebUI.dll,一切都会按预期工作。
所以我的问题是 MSDeploy 如何通过 MSBuild 创建其“自己的”版本的 WebUI.dll? (不 - 在发布模式下未选中定义调试常量复选框)。在服务器上的任何地方都找不到 1.0.0 版本的 WebUI.dll,所以我猜它必须是在 msdeploy 运行时“创建”的?
(我最近所做的唯一更改是添加一个新的构建定义,它构建相同的解决方案并运行所有测试但不部署任何东西。)
更新:我尝试使用构建过程使用的相同发布配置文件从 VS 发布,并且按预期工作。部署的 WebUI.dll 是在发布模式下构建的。该版本未应用,因为它是构建过程的一部分,但重要的是它是部署的发布模式 dll,而不是构建过程进行部署时的调试。我还尝试创建一个 Web 部署包并将其安装在本地服务器上,结果相同。
所以问题仍然是构建过程中构建的 WebUI.dll 是正确的(发布模式和正确的版本控制) - 但是在构建服务器上的部署过程中被调试模式“替换”并且没有版本控制
更新 2;编译命令
C:\Program Files (x86)\MSBuild\12.0\bin\amd64\MSBuild.exe /nologo /noconsolelogger "C:\Builds\2\Products\SomeApp4.Main\src\SomeApp4\Main\Source\SomeApp4.Web.sln" /nr:False /fl /flp:"logfile=C:\Builds\2\Products\SomeApp4.Main\src\SomeApp4\Main\Source\SomeApp4.Web.log;encoding=Unicode;verbosity=normal" /p:SkipInvalidConfigurations=true /p:DeployOnBuild=true /p:PublishProfile=Chicago /p:AllowUntrustedCertificate=true /p:Password=bw /m /p:OutDir="C:\Builds\2\Products\SomeApp4.Main\bin\SomeApp4.Web\\" /p:Configuration="Release" /p:Platform="Any CPU" /p:VCBuildOverride="C:\Builds\2\Products\SomeApp4.Main\src\SomeApp4\Main\Source\SomeApp4.Web.sln.Any CPU.Release.vsprops" /dl:WorkflowCentralLogger,"C:\Program Files\Microsoft Team Foundation Server 12.0\Tools\Microsoft.TeamFoundation.Build.Server.Logger.dll";"Verbosity=Normal;BuildUri=vstfs:///Build/Build/740;IgnoreDuplicateProjects=False;InformationNodeId=14;TargetsNotLogged=GetNativeManifest,GetCopyToOutputDirectoryItems,GetTargetPath;LogProjectNodes=True;LogWarnings=True;TFSUrl=http://boston.SomeCompany.local:8080/tfs/SomeCompany;"*WorkflowForwardingLogger,"C:\Program Files\Microsoft Team Foundation Server 12.0\Tools\Microsoft.TeamFoundation.Build.Server.Logger.dll";"Verbosity=Normal;" /p:BuildId="abd7db3d-4ff8-43b4-ab36-f35c6f6e5697,vstfs:///Build/Build/740" /p:BuildLabel="SomeApp4.Main_4.0.6.740_20160121_103558" /p:BuildTimestamp="Thu, 21 Jan 2016 09:35:59 GMT" /p:BuildSourceVersion="LSomeApp4.Main_4.0.6.740_20160121_103558@$/Products" /p:BuildDefinition="SomeApp4.Main"
【问题讨论】:
-
如果你从 VS 发布,你会得到相同的结果吗?您还可以尝试创建一个 MSDeploy 包并检查包内的文件版本。我假设您一直使用 PowerShell 脚本来设置 dll 版本?
-
在回复您的评论的帖子中查看我的更新。是的 - 我一直使用相同的 powershell 脚本。那仍然有效。在构建服务器上构建的文件是正确的(带有版本控制的发布模式),但其中一个 dll 文件 WebUI.dll 在部署过程中被替换 - 但仅在构建过程中
-
你能分享你的 msdeploy 命令吗?
-
是 - 请参阅帖子中的更新 2
-
我能给你的最好建议是开始选择构建/部署选项,直到找到导致问题的选项或相反:创建一个新构建慢慢添加完整构建测试的每个组件一路上
标签: tfs msbuild continuous-integration tfsbuild