【问题标题】:web deploy from a folder with spaces从带有空格的文件夹进行网络部署
【发布时间】:2013-07-05 08:31:04
【问题描述】:

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

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

MVCTestApp.deploy.cmd /Y -enableRule:DoNotDeleteRule

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

\Folder 此时出乎意料。

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

有人有解决办法吗?

【问题讨论】:

  • 令人难以置信的是,即使是现在,路径中的空格仍然是一个问题。

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


【解决方案1】:

对我来说,这个问题与下面的链接有关(我试图让它在 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 时使用缩短的目录名称可以解决此问题。只是不要使用任何带空格的路径,它应该适合你。

【讨论】:

    【解决方案2】:

    如果是导致问题的原因,您可能需要在调用 .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 的文件并从命令行调用它,这样您就可以回复任何错误而不是立即关闭窗口。

    【讨论】:

    • 仍然没有运气(同样的错误 - 没有调查它来自哪里)。你自己试过吗?如果是,您能否发布 .bat 文件的确切内容?
    • 我可以调用另一个需要 _DeploySetParametersFile 参数的 .cmd。这个批处理文件回显是输出,它设置为我在调用批处理文件中提供的任何内容。这应该可以解决您的问题。
    • 我不明白。您是否正在使用示例项目进行实际尝试?(只需一个空的 ASP.NET 项目即可)。我不相信这个 bug 是如何存活这么久的,而且没有人偶然发现它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    相关资源
    最近更新 更多