VS2012和2013:无法发布服务项目 - 指定的路径太长

Mik*_*ill 5 publish visual-studio-2012

我有一个VS2012解决方案,包含10个项目,突然间,我无法再将我的服务项目发布到任何文件夹.

发布到D Drive

当我尝试发布到D:\ temp时,我收到此错误:

The expression "[System.IO.Path]::GetFullPath(obj\Release%25252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252528Prod%25252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252529\)" cannot be evaluated. The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters. C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web\Microsoft.Web.Publishing.targets

在此输入图像描述

嗯?

VS2012(使用更新4)似乎已将我的配置名称" Release(Prod) "并完全搞砸了,导致GetFullPath产生的路径名太长.

我怎么能解决这个问题?

出于绝望,我试图在VS2013中构建和发布相同的项目 - 它有相同的错误消息.

我的一位同事说他看到了同样的事情,但是通过从配置名称中删除空格来修复它.我试过这个,这就是为什么我的配置名称现在是" Release(Prod) "而不是" Release(Prod) ",但它没有任何区别.

我也打开了这个错误建议的文件是错误的原因:C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v11.0\Web\Microsoft.Web.Publishing.targets

..并注意到有关于AnyCPU平台名称的内容.我试过让我的服务项目使用"AnyCPU"和"任何CPU"(抑郁的叹息)但似乎没有任何区别.

  <PropertyGroup Condition=" '$(IntermediateOutputPath)' == '' ">
    <IntermediateOutputPath Condition=" '$(PlatformName)' == 'AnyCPU' Or '$(PlatformName)' == ''">$(BaseIntermediateOutputPath)$(Configuration)\</IntermediateOutputPath>
    . . .
  </PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

还有其他人看过这个问题吗?

(稍晚一些..)

这太奇怪了(令人沮丧).

我的解决方案有5种配置 - 默认的Debug和Release,以及Test,PreProduction和Production环境的额外配置.

在此输入图像描述

如果我选择包含括号的这三个配置中的任何一个,我会得到这个荒谬的"指定路径太长"错误,因为VS2012破坏了路径名(如我上面的第一个屏幕截图所示).

我不禁疑惑......这是某种VS2012错误,处理配置名称中的空格或括号?

Mat*_*hew 2

当发布到文件系统时,我可以直接使用on tyhe选项卡中的 ( , (, ))部署到路径(即不从配置名称构建路径) - 但这不是根据配置定位不同位置的解决方案。Target LocationConnection

如果您想在配置名称中保留特殊字符,但指定不会导致并发布的部署文件夹的路径,则这篇文章可能会有所帮助:Visual Studio:如何正确构建和指定 x64 和 x86 的配置和平台

具体发挥这里的设置:

在项目属性页面中,在解决方案下拉列表中选择“调试/发布”和“x86/x64”的各种排列。确保目标处理器设置正确(应该是,但我发现了一些情况,但可能是因为我之前的尝试)。另外,设置输出目录。这应该没问题并且是自动的(/bin/x86/Debug 等)。如果没有,请修复。

看看实际发生的情况也可能有用:

查看插入的数字:

  • %25是一个编码的%
  • %28是一个编码的(
  • %29是一个编码的)

看路径:

obj\发布%252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252 525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525***28***产品%2525252525252525252525252 52525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525 252525252525252525252525252525252525252525252525252525252525***29***)

我认为正在发生的事情:

因此,这似乎是一个很好的线索,表明这些是 URL 或 XML 编码的。似乎正在发生的事情是(被编码为%28然后%被递归编码为%25- 生成一个无穷大%252525252525252525...

一个更有趣的问题实际上是为什么它会停止使用此错误25从 's创建%'s(两次都停止在 214 个字符处创建 25's,包括 和%- 这28 / 29不是一个非常有趣的数字)。

查看C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web\Microsoft.Web.Publishing.targets您引用的文件 - 这些字符串被编码为 XML 是有意义的。我想说这绝对是一个错误......我没有修复建议。