从包含空格的文件夹进行Web部署

时间:2013-07-05 08:31:05

标签: asp.net visual-studio-2012 webdeploy

我有一个非常简单的场景,ASP.NET MVC4网站。 我使用VS2012的Publish功能生成Web部署包。 这会生成一堆文件,一个.zip,一些.xml和一个xxx.deploy.cmd文件。

我像往常一样使用以下命令运行deploy.cmd文件:

MVCTestApp.deploy.cmd /Y -enableRule:DoNotDeleteRule

从程序文件的子文件夹(包含空格(例如C:\ Program Files(x86)\ Folder With Spaces \ TestApp)运行时,此命令失败并显示错误

\此时文件夹意外。

问题显然是在处理_DeploySetParametersFile参数时,但我不能只修复.cmd文件,因为它是在每次发布时生成的。

有没有人有解决方法呢?

2 个答案:

答案 0 :(得分:3)

对我来说,问题与下面的链接有关(我试图让这个在jenkins中运行):

https://issues.jenkins-ci.org/browse/JENKINS-11992?focusedCommentId=201790#comment-201790

我通过使用目录的缩短版本解决了这个问题。你可以输入dir / x来找出它们是什么。

我的构建命令最终看起来像这样:

MSBuild c:\PROGRA~2\Jenkins\jobs\REPVIE~1\workspace\Builder\RepView\RepView.csproj /p:DeployOnBuild=true /p:PublishProfile=JenkinsDeployment

我的部署命令最终看起来像这样:

c:\PROGRA~2\Jenkins\jobs\REPVIE~1\workspace\Builder\RepView\obj\Debug\Package\RepView.deploy.cmd /y /M:http://<target-address> /u:<username> /p:<password>

因为生成了deploy.cmd文件,所以在调用MSBuild时使用目录的缩写名称可以解决此问题。只是不要使用带空格的任何路径,它应该适合你。

答案 1 :(得分:1)

如果是导致问题的原因,您可能需要在调用.cmd之前设置_DeploySetParametersFile参数的值。创建另一个静态批处理文件,您将使用它来执行此操作。

首先,使用转义空格设置参数的值,然后从其位置调用cmd。每次需要部署应用程序时都使用此批处理文件。完整内容:

@if %_echo%!==! echo off
setlocal
set _DeploySetParametersFile=C:\Program^ Files^ (x86)\Folder^ With^ Spaces\TestApp\xxx.SetParameters.xml
"C:\Program Files (x86)\Folder With Spaces\TestApp\xxx.Deploy.cmd"

调用类似mydeploy.cmd的文件并从命令行调用它,以便您可以回复任何错误,而不是立即关闭窗口。