部署的dll文件不是TFS

时间:2016-01-20 16:00:03

标签: tfs msbuild continuous-integration tfsbuild tfs2013

我有一个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时显示。

如果我从构建目录甚至是PublishedWebsites目录中复制构建的WebUI.dll,一切都按预期工作。

所以我的问题是MSDeploy如何通过MSBuild创建其自己的WebUI.dll版本? (并且没有 - 在发布模式下未选中“定义DEBUG常量”复选框)。版本1.0.0 WebUI.dll无法在服务器上的任何位置找到,所以我猜它必须在msdeploy运行时“创建”?

(我最近做的唯一改变是添加一个新的构建定义,它构建相同的解决方案并运行所有测试但不部署任何东西。)

更新:我尝试使用构建过程使用的相同发布配置文件从VS发布,并且按预期工作。部署的WebUI.dll是在发布模式下构建的。该版本不是应用的,因为它是构建过程的一部分,但重要的是它是部署的Release模式dll而不是构建过程进行部署时的Debug。我还尝试创建一个Web部署包,并将其安装在本地服务器上,结果相同。

所以问题仍然是构建过程中构建的WebUI.dll是正确的(发布模式和正确的版本控制) - 但是在构建服务器上通过调试模式进行部署并且没有多样化时会被“替换”

更新2; Msbuild cmd

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"

2 个答案:

答案 0 :(得分:0)

更改装配版本时,源代码管理下的版本不会更改。您只能更改已在构建代理计算机上复制的版本。如果msdeploy命令的源指向TFS中的项目,则无法获得版本化程序集。

答案 1 :(得分:0)

我发现了问题。

构建定义构建了4个解决方案,其中一个是WebUI(aspnet mvc)解决方案,另一个是Api解决方案(asp.net WebApi)

在Api解决方案中,项目引用了WebUI项目,但WebUI项目不在Api解决方案中。

MSbuild无论如何解决了WebUI项目,因此没有错误,api解决方案的构建+部署工作正常。但是WebUI项目是在调试模式下构建的,因为它在Api解决方案中没有解决方案配置我想

msbuild运行带有deploy标志的api解决方案时的问题,它还设法部署了在debug中构建的WebUI项目。

因此,WebUI项目已部署两次。首先是WebUI解决方案中正确的一个,然后是使用Api解决方案编译的错误的调试WebUI。

卫生署!我只能这么说。

感谢您的帮助。

相关问题