作为构建过程的一部分,我们使用MSDeploy部署Web应用程序。直到几周前,它一直运行良好(我认为当我们将build / TFS服务器更新为TFS 2010的SP1时)。
在我们的构建定义中,有一个步骤来调用流程。此过程将调用生成的deploy.cmd文件,并传入几个其他参数。很长一段时间都可以正常工作,但是现在我们得到了:
错误:无法识别的参数'“ -skip:objectName = filePath,absolutePath =。* cmsservices.config”'。所有参数必须以“-”开头。
如帮助中所述,我们将其他参数传递给引号:
WebApplication.deploy.cmd / Y / M:sv-ad-iis02 -allow不受信任的“ -skip:objectName = filePath,absolutePath =。* cmsservices.config”“ -skip:objectName = filePath,absolutePath =。* servicemodel.client.config “” -skip:objectName = dirPath,absolutePath = app_data“
但是,此技巧不再起作用。删除引号也将删除任何字符,例如=和,将被空格替换。
我通过将旧的deploy.cmd与新版本进行比较来追溯到此行:
第76行:
@rem Any addition flags, pass through to the msdeploy
set _ArgMsDeployAdditionalFlags=%_ArgMsDeployAdditionalFlags% %_ArgCurrentOriginal%
在以前的版本中,这是:
@rem Any addition flags, pass through to the msdeploy
set _ArgMsDeployAdditionalFlags=%_ArgMsDeployAdditionalFlags% %_ArgCurrent%
_ArgCurrentOriginal使用%1而不是%〜1,如果我更改此代码,它们将再次起作用。但是,每次都会自动生成deploy.cmd文件(至少看起来是这样)
有什么线索为什么改变了它以及如何处理呢?
更新;我通过使用环境变量来传递这些值来解决此问题。它仍然不能解决新的deploy.cmd文件以不同的方式转义引号的问题。
我现在在部署流程工作流程中放置的解决方案:
<mtbwa:InvokeProcess Arguments="[String.Format("/Y /M:{0} -allowUntrusted", DeploymentServerName)]" DisplayName="Deploy selected Web Application using MSDeploy" EnvironmentVariables="[New Dictionary(Of String, String) From {{"_MsDeployAdditionalFlags", DeploymentParameters}}]" FileName="[String.Format("{0}\Packages\{1}\{2} {3}\{4}.deploy.cmd", BuildDetail.DropLocation, platform.Configuration, ApplicationName, VersionString, DeploymentPackageName)]" sap:VirtualizedContainerService.HintSize="464,420" Result="[ExitCode]">
最佳答案
这是SP1版本中引入的错误。您可以通过编辑%ProgramFiles(x86)%\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets
(注意64位路径)来解决此问题。更改第3238-3258行以匹配旧的deploy.cmd文件中的相应内容;差异仅应像3行,删除_ArgCurrentOriginal并使用_ArgCurrent。
最近还发布了有关此问题的知识库:http://support.microsoft.com/kb/2537134。这包括一个更新的.targets文件,因此您不必自己进行编辑。
关于tfsbuild - MSDeploy批处理文件不再处理引号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5539968/