Подтвердить что ты не робот

Ошибка публикации веб-сайта из-за слишком длинного пути к файлу

Я пытаюсь опубликовать проект веб-сайта у поставщика, который имеет смехотворно длинный путь к некоторым его файлам. При публикации ошибка:

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\

Я думал, что смогу перенаправить VS в другой временный каталог на c:\tem, следуя этому ответу SO: слишком длинный путь при публикации проекта веб-сайта

Я создаю свой профиль публикации, и как только я его открою, появляется ошибка, указывающая, что 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>

Когда я пытаюсь опубликовать, я получаю всплывающее окно модального окна под названием "Обнаружение изменений файла", с сообщением "Проект YourWebsite был изменен вне среды", и он спрашивает меня, хочу ли я перезагрузить. В моем списке ошибок я продолжаю получать ошибку о том, что путь слишком длинный, поскольку он не пытается использовать каталог c:\tem, который я идентифицировал.

Мне нужно положить эту чертову на сервер, я готов к любому решению, которое позволяет мне публиковать кровавое дело. Я мало знаю о шаблоне проекта веб-сайта, поэтому, пожалуйста, дайте мне знать, если есть лучший способ.

4b9b3361

Ответ 1

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

Добавьте следующую строку по умолчанию в PropertyGroup файла веб-проекта.

<IntermediateOutputPath>..\Temp</IntermediateOutputPath>

Вероятно, вы можете сделать вышеуказанный путь C:\temp или...... \Temp (по мере необходимости, чтобы как можно ближе к корню диска).

В моем случае не было .csproj или .vbproj(файл проекта веб-сайта), но был файл website.publishproj, который предупреждает вас не редактировать его, но я все равно сделал, и он сделал трюк.

Ответ 2

Благодаря Stelvio, от http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2156195-fix-260-character-file-name-length-limitation, есть решение:

Ну, я нашел обходное решение, которое ALLOW работает с контуром с более чем 260 символами.

Отказ от ответственности: я пробовал этот трюк только для Windows 8 x64 и Visual Studio 2013

Итак, чтобы он работал, я просто создал соединение с папкой с командой mklink:

Предположим, что это исходный путь: d:\very\very\long\path\to\solution\folder, вы можете получить короткую ссылку, поскольку d:\short_path_to_solution_folder просто запускает эту команду из оболочки dos в качестве администратора: mklink/J d:\short_path_to_solution_folder d:\very\very\long\путь\to\solution\папка

изменить источник и путь назначения к вам

С наилучшими пожеланиями! Стельвио

по этой ссылке: http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2156195-fix-260-character-file-name-length-limitation

Ответ 3

При перемещении проекта ближе к корневому файлу работает. Я нашел ссылку на решение, которое сработало для меня. Сайт также проделал большую работу по обсуждению проблемы, а также деталей, лежащих в основе его решения.

Сказал Хашими решение проблемы длинного пути

РЕДАКТИРОВАТЬ:

Подведем итог предоставленной ссылке:

Вы можете обновить свой файл профиля публикации, который используется MSBuild, чтобы включить правило замены, которое сократит путь вывода при публикации в пакете веб-развертывания (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, более коротким путем. В этом конкретном примере замените путь на "website" в элементе 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

Ответ 4

Ответ Джейсона Бэка работал со мной с небольшим изменением. Чтобы избежать ошибки, "IntermediateOutputPath должен заканчиваться конечной косой чертой". используйте "\" в конце пути: .. \Temp\

Ваш "CONFIG_PUBLISH_FILE.pubxml" должен выглядеть следующим образом ( "..." опускает другую конфигурацию, которая может иметь файл): ...   ...   .. \Temp \   ...

Ответ 5

Во время публикации проекта компилятор Visual Studio проверяет размер файлов, которые являются частью проекта.

Итак, я искал длинные имена в файлах. Я нашел и переименовал эти файлы.

Прекрасно работала

Ответ 6

Простое решение этой проблемы состоит в том, чтобы иметь короткие имена для папок, не слишком много папок внутри папок, я имею в виду, что иерархия папок проста, и вы получите эту ошибку.

Ответ 7

Эта ошибка возникает из-за длинного имени пути.... U просто вырезает вашу папку из текущего местоположения в D-диск или F-диск. предположим, что ваше имя папки проекта "myproject", и вы должны вырезать эту папку и вставить в D-диск диска F, что вашим текущим именем пути будет D:\myproject или F:\myproject. Затем вы снова опубликуете... Это сработает...