39

我正在尝试从供应商那里发布一个网站项目,该供应商的某些文件的路径非常长。发布的时候报错:

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.

当我发布时,Visual Studio 2012 Update 3 正在尝试写入临时目录,并且前缀很长:

 C:\Users\cuser\AppData\Local\Temp\WebSitePublish\MidasCMS400v9-1580334405\obj\Debug\Package\PackageTmp\

我想我可以c:\tem通过遵循这个 SO 答案将 VS 重定向到另一个临时目录:发布网站项目时的临时路径太长

我创建了我的发布配置文件,一旦我打开它,就会出现一个错误,表明它WebPublishMethod不是PropertyGroup. 无论如何,我更新了文件,使其看起来像这样:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>FileSystem</WebPublishMethod>
    <LastUsedBuildConfiguration>Debug</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <SiteUrlToLaunchAfterPublish />
    <ExcludeApp_Data>False</ExcludeApp_Data>
    <publishUrl>C:\Sites\MidasPublish</publishUrl>
    <DeleteExistingFiles>False</DeleteExistingFiles>
    <AspnetCompileMergeIntermediateOutputPath>c:\tem\</AspnetCompileMergeIntermediateOutputPath>
  </PropertyGroup>
</Project>

当我尝试发布时,我会弹出一个名为“检测到文件修改”的模式框,并显示“The project YourWebsite has been modified outside the environment”,并询问我是否要重新加载。在我的错误列表中,我继续收到有关路径太长的错误,因为它没有尝试使用c:\tem我确定的目录。

我需要把这个该死的东西放到服务器上,我愿意任何允许我发布该死的东西的解决方案。我对网站项目模板了解不多,所以如果有更好的方法,请告诉我。

4

7 回答 7

58

来自http://forums.asp.net/t/1944241.aspx?Website+publish+failing+due+to+file+path+being+too+long

在web 项目文件的默认PropertyGroup中添加以下行。

<IntermediateOutputPath>..\Temp\</IntermediateOutputPath>

您可能会创建上述路径 C:\temp 或 ......\Temp (根据需要使其尽可能靠近驱动器的根目录。

就我而言,没有 .csproj 或 .vbproj (网站项目文件),但有一个 website.publishproj 文件警告您不要编辑它,但我还是做了,它成功了。

于 2014-11-21T15:30:12.397 回答
4

感谢 Stelvio,来自http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2156195-fix-260-character-file-name-length-limitation,有一个解决方案:

好吧,我找到了一种解决方法,允许使用超过 260 个字符的路径。

免责声明:我只在 Windows 8 x64 和 Visual Studio 2013 上尝试过这个技巧

因此,为了使其正常工作,我只需使用 mklink 命令创建到文件夹的连接:

假设这是原始路径:d:\very\very\long\path\to\solution\folder,您可以获得一个短链接为 d:\short_path_to_solution_folder 只需以管理员身份从 dos shell 启动此命令:mklink /J d :\short_path_to_solution_folder d:\very\very\long\path\to\solution\folder

根据您的需要更改源和目​​标路径

此致!斯泰尔维奥

从这个链接:http: //visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2156195-fix-260-character-file-name-length-limitation

于 2015-05-08T06:51:54.013 回答
3

虽然将项目移近根文件确实有效。我找到了一个对我有用的解决方案的链接。该网站在讨论这个问题以及他的解决方案背后的细节方面也做得很好。

Sayed Hashimi 对长路径问题的解决方案

编辑:

总结提供的链接:

您可以更新 MSBuild 使用的发布配置文件,以包含一个替换规则,该规则将在发布到 Web 部署包(Zip 文件)时缩短输出的路径。

例如,假设使用 Visual Studio 创建的默认配置文件发布,我们在 zip 文件中获得以下路径:

archive.xml
Content\C_C\Temp\package\WebApplication1\obj\Release\Package\PackageTmp
Content\C_C\Temp\package\WebApplication1\obj\Release\Package\PackageTmp\bin
Content\C_C\Temp\package\WebApplication1\obj\Release\Package\PackageTmp\bin\WebApplication1.dll
Content\C_C\Temp\package\WebApplication1\obj\Release\Package\PackageTmp\index.html
Content\C_C\Temp\package\WebApplication1\obj\Release\Package\PackageTmp\Web.config
parameters.xml
systemInfo.xml

诀窍是用较短的路径替换 Content 之后定义的所有路径。在此特定示例中,将 PackagePath 元素中的路径替换为“网站”。

可以编辑发布配置文件 (.pubxml) 并在文件末尾附近添加以下行,就在 Project 元素终止之前。

<PropertyGroup>
  <PackagePath Condition=" '$(PackagePath)'=='' ">website</PackagePath>
  <EnableAddReplaceToUpdatePacakgePath Condition=" '$(EnableAddReplaceToUpdatePacakgePath)'=='' ">true</EnableAddReplaceToUpdatePacakgePath>
    <PackageDependsOn>
    $(PackageDependsOn);
    AddReplaceRuleForAppPath;
    </PackageDependsOn>
</PropertyGroup>
<Target Name="AddReplaceRuleForAppPath" Condition=" '$(EnableAddReplaceToUpdatePacakgePath)'=='true' ">
  <PropertyGroup>
    <_PkgPathFull>$([System.IO.Path]::GetFullPath($(WPPAllFilesInSingleFolder)))</_PkgPathFull>
  </PropertyGroup>

  <!-- escape the text into a regex -->
  <EscapeTextForRegularExpressions Text="$(_PkgPathFull)">
    <Output TaskParameter="Result" PropertyName="_PkgPathRegex" />
  </EscapeTextForRegularExpressions>

  <!-- add the replace rule to update the path -->
  <ItemGroup>
    <MsDeployReplaceRules Include="replaceFullPath">
      <Match>$(_PkgPathRegex)</Match>
      <Replace>$(PackagePath)</Replace>
    </MsDeployReplaceRules>
  </ItemGroup>
</Target>

现在,发布配置文件路径应如下所示:

archive.xml
Content\website
Content\website\bin
Content\website\bin\WebApplication1.dll
Content\website\index.html
Content\website\Web.config
parameters.xml
systemInfo.xml
于 2015-01-09T20:35:02.630 回答
0

Jason Beck 的回答对我有一点帮助。为避免错误“IntermediateOutputPath 必须以斜杠结尾”。在路径末尾使用“\”:..\Temp\

您的“CONFIG_PUBLISH_FILE.pubxml”应如下所示(“...”省略了您文件可能具有的其他配置): ... ... ..\Temp\ ...

于 2015-12-20T17:53:03.423 回答
0

在我的情况下,这是因为 windows 的默认遗留字符串长度限制。这仍然设置为 256 个字符的限制。

为了解决这个问题,我从管理员 powershell 会话中运行了以下命令

New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" `
-Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -Force

我需要重新启动系统才能使更改生效。

Microsoft 参考文档链接在这里

于 2021-12-24T17:38:12.763 回答
0

在发布项目时,Visual Studio 编译器会检查作为项目一部分的文件的大小。

所以我在文件中搜索了长名称。我找到并重命名了这些文件。

工作完美

于 2017-05-05T16:42:15.637 回答
-4

出现此错误是因为路径名长....您只需将文件夹从当前位置剪切到 D 驱动器或 F 驱动器。假设您的项目文件夹名称为“myproject”,您应该将该文件夹剪切并粘贴到 F 盘的 D 盘,您当前的路径名称将是 D:\myproject 或 F:\myproject。然后你再次发布......它会工作......

于 2014-07-25T06:05:56.687 回答