【问题标题】:Illegal characters in path for nuget packnuget 包路径中的非法字符
【发布时间】:2013-06-23 17:09:18
【问题描述】:

我正在使用 Cruise Control 打包一个应用程序,命令是这样的

<Exec Command="$(NugetToolPath) pack &quot;@(NuSpecs)&quot; -OutputDirectory \\servername\PackageSource -BasePath &quot;%(NuSpecs.RootDir)%(NuSpecs.Directory)&quot; -NoPackageAnalysis" />

我将错误范围缩小为它出现的 BasePath

-BasePath "D:\Code\Mobile_Trunk\PreCompiledWeb\Portal\Mobile LT Admin\"

我知道这个问题,因为它应该是

-BasePath "D:\Code\Mobile_Trunk\PreCompiledWeb\Portal\Mobile LT Admin"

但是因为我使用的是 .Directory 元数据,所以它总是会在最后返回一个 \

我通常不会引用基本路径,但由于目录中有空格,我别无选择。有没有解决的办法?我不知道任何其他元数据会返回完整的文件夹结构,除了我如何布置它

更新:

我找到了这个解决方案,它仍然没有帮助我了解如何解决非法路径的问题,但它确实有效。

<Exec Command="$(NugetToolPath) pack &quot;%(NuSpecs.RootDir)%(NuSpecs.Directory)%(Nuspecs.FileName).nuspec&quot; -OutputDirectory \\servername\PackageSource  -NoPackageAnalysis" />

【问题讨论】:

  • 是因为路径中有空格吗?你需要逃避吗?
  • 路径需要间隔,如果 -BasePath 末尾没有 \,它将很好地打包应用程序,我需要一种方法来删除 .directory 元数据结果末尾的 \

标签: msbuild nuget


【解决方案1】:

只需在目录之后和引号字符之前插入一个空格:

-OutputDirectory "\\servername\PackageSource\ " 

在此处查看接受的答案(问题本身并不高度相关,但答案是):

How to accept command-line args ending in backslash

这个引人入胜的参考资料还链接到该问题的另一个答案:
http://www.daviddeley.com/autohotkey/parameters/parameters.htm#WINCRULESDOC

【讨论】:

    【解决方案2】:

    当我们从 Jenkins 执行 nuget restore 时遇到此错误,我们在从节点上运行 JNLP 代理。

    原来Illegal characters in path 中的“Path”表示 PATH 环境变量,在我们的例子中,nuget.exe 继承了一个包含引号的 PATH 变量,例如:

    路径=C:\Program Files\foo;"C:\Program Files\bar"

    如果您使用 Jenkins,请添加 echo %PATH% 以由 Jenkins 在某处执行,并检查它是否有任何有趣的字符。

    【讨论】:

      【解决方案3】:

      我遇到了这个问题,错误消息并没有太大帮助 - 它没有打印出有问题的行或路径。我不得不取出我怀疑可能存在问题的配置片段,直到我可以到达有问题的行(删除有问题的行允许构建通过)。

      原来有问题的行有一个空白变量(我使用Message 任务将其打印出来)。从那里,我能够将变量设置为我的项目所期望的。

      【讨论】:

        猜你喜欢
        • 2021-10-09
        • 1970-01-01
        • 2019-08-30
        • 1970-01-01
        • 2012-03-05
        • 2018-02-28
        • 2015-07-31
        相关资源
        最近更新 更多