VisualStudio PathTooLongException - PullRequest
       46

VisualStudio PathTooLongException

1 голос
/ 04 июля 2019

У меня возникли проблемы с VisualStudio - 2017 Pro и 2019 Pro. Если я пытаюсь открыть свое решение, я получаю эту ошибку:

enter image description here

Сообщение об ошибке в VS2019 немного отличается, но имеет то же значение. Когда я исследовал файл ActivityLog, в этой проблеме есть только один интересный узел:

<entry>
<record>698</record>
<time>2019/07/03 08:14:00.064</time>
<type>Error</type>
<source>Editor or Editor Extension</source>
<description>System.IO.PathTooLongException: 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.&#x000D;&#x000A;

в System.IO.Path.LegacyNormalizePath (Строковый путь, Boolean fullCheck, Int32

maxPathLength, Boolean expandShortPaths)&#x000D;&#x000A;
   at System.IO.Path.NormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths)&#x000D;&#x000A;
   at System.IO.Path.InternalGetDirectoryName(String path)&#x000D;&#x000A;
   at Microsoft.VisualStudio.ErrorListPkg.PathColumnDefinition.GetCachedDirectoryName(ITableEntryHandle entry)&#x000D;&#x000A;
   at Microsoft.VisualStudio.ErrorListPkg.PathColumnDefinition.TryCreateStringContent(ITableEntryHandle entry, Boolean truncatedText, Boolean singleColumnView, String&amp; content)&#x000D;&#x000A;
   at Microsoft.VisualStudio.Shell.TableControl.TableEntryHandleExtensions.TryCreateStringContent(ITableEntryHandle entry, ITableColumnDefinition column, Boolean truncatedText, Boolean singleColumnView, String&amp; content)&#x000D;&#x000A;
   at Microsoft.VisualStudio.Shell.TableControl.Implementation.TableControl.GenerateFiltersForColumn(UpdateResults results, ITableColumnDefinition columnDefinition)&#x000D;&#x000A;
   at Microsoft.VisualStudio.Shell.TableControl.Implementation.TableControl.UpdateEntryFilters(UpdateResults results, HashSet`1 variableColumns)&#x000D;&#x000A;
   at Microsoft.VisualStudio.Shell.TableControl.Implementation.TableControl.UpdateEntries(HashSet`1 variableColumns, Boolean anyColumnChanges, List`1&amp; frozenSinksAwaitingDisposal)&#x000D;&#x000A;
   at Microsoft.VisualStudio.Shell.TableControl.Implementation.TableControl.&lt;UpdateEntriesAsync&gt;d__182.MoveNext()&#x000D;&#x000A;
--- End of stack trace from previous location where exception was thrown ---&#x000D;&#x000A;
   at Microsoft.VisualStudio.Telemetry.WindowsErrorReporting.WatsonReport.GetClrWatsonExceptionInfo(Exception exceptionObject)</description>

Есть ли способ, как точно определить, какой путь неправильный? Я подозревал, что эта проблема возникла из-за AddFlow. Но если я отключу этот аддон, ничего не изменится.

Другой товарищ по команде не имеет этой проблемы с тем же решением.

Ответы [ 2 ]

0 голосов
/ 08 июля 2019

Я как-то избавился от этого сообщения об ошибке. Я не понимаю, как, но позвольте мне поделиться с вами шагами.

  1. Я начал удалять проекты из решения один за другим, чтобы выяснить, какой проект вызывает проблему.
  2. Как только я нашел плохое, я отменил все изменения в GIT.

  3. Я повторил этот подход для файлов и папок в этом проекте. Когда я удалил некоторые файлы и перезапустил VS, проблема исчезла.

  4. Снова отменены все изменения в GIT.

  5. Вуаля, ошибка в истории как в 2017, так и в 2019 году. Ничего не изменилось в файлах SLN или CSPROJ.

0 голосов
/ 04 июля 2019

Windows, унаследованная от MS-DOS, очень короткая максимальная длина пути при использовании простых API. Многие приложения имеют фиксированные буферы для этого размера - ищите MAX_PATH - и, следовательно, нет простого способа сделать вещи длиннее. 248 символов - это много, когда 10 МБ - это типичный размер жесткого диска.

NTFS и Win32 могут поддерживать гораздо более длинные пути (2 15 -1 символов), но требуют правильного использования API. Что многие, даже активно развитые, не делают.

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

Убедитесь, что вы избегаете длинного пути в корне вашего решения (расположение проекта Visual Studio по умолчанию здесь не помогает).

...