2
votes

VisualStudio PathTooLongException

J'ai rencontré des problèmes avec VisualStudio - à la fois 2017 Pro et 2019 Pro. Si j'essaye d'ouvrir ma solution, j'obtiens cette erreur:

 entrez la description de l'image ici

Le message d'erreur dans VS2019 est un peu différent mais avec la même signification. Lorsque j'ai étudié le fichier ActivityLog, il n'y a que ce nœud intéressant concernant ce problème:

<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;
at System.IO.Path.LegacyNormalizePath(String path, 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>
</entry>

Y a-t-il un moyen de déterminer exactement quel chemin est erroné? Je soupçonnais que Addid SpecFlow était à l'origine de ce problème. Mais si je désactive cet addon, rien ne change.

Un autre coéquipier n'a pas ce problème avec la même solution.


1 commentaires

3 Réponses :


-2
votes

Windows, hérité de MS-DOS, une longueur de chemin maximale très courte lors de l'utilisation des API simples. De nombreuses applications ont des tampons fixes à cette taille - recherchez MAX_PATH - et donc pas de moyen facile d'allonger les choses. 248 caractères, c'était beaucoup alors que 10 Mo était une taille de disque dur typique.

NTFS et Win32 peuvent prendre en charge des chemins beaucoup plus longs (2 15 -1 caractères), mais nécessitent d'utiliser les API de la bonne manière. Ce que beaucoup d'entre eux, même ceux qui sont activement développés, ne le font pas.

Je doute que Visual Studio, même dans sa dernière version, sans parler de toutes les extensions, ait été entièrement mis à jour pour gérer les longs chemins.

Vérifiez que vous évitez un long chemin à la racine de votre solution (l'emplacement du projet par défaut de Visual Studio n'aide pas ici).


0 commentaires

0
votes

Je me suis en quelque sorte débarrassé de ce message d'erreur. Je ne comprends pas comment, mais permettez-moi de partager les étapes que j'ai suivies.

  1. J'ai commencé à supprimer les projets de la solution un par un pour déterminer quel projet était à l'origine du problème.
  2. Une fois que j'ai trouvé le mauvais, j'ai annulé toutes les modifications sur GIT.

  3. J'ai répété cette approche pour les fichiers et dossiers de ce projet. Lorsque j'ai supprimé certains fichiers et redémarré le VS, le problème a disparu.

  4. A nouveau annulé toutes les modifications sur GIT.

  5. Voila, l'erreur est historique en 2017 et en 2019. Rien n'a changé dans les fichiers SLN ou CSPROJ.


0 commentaires

0
votes

Étant donné que mes chemins sont assez longs, j'ai également rencontré quelques-unes de ces PathTooLongExceptions. C'est esp. le cas où le projet VS utilise des chemins relatifs. De toute évidence, raccourcir les chemins résoudra beaucoup de ces problèmes.

Mais avant de procéder à cette refonte assez longue de votre environnement de développement, vous pouvez faire certaines choses:

  1. Utilisez des liens symboliques ou des jonctions avec un chemin plus court (par exemple, mklink / J M.E.D.A Microsoft.Extensions.DependencyInjection.Abstractions) et utilisez-les dans votre fichier projet
  2. Utilisez des chemins absolus: les chemins relatifs peuvent devenir très longs en arrière-plan car Visual Studio peut faire référence à% (FullPath) qui va plutôt rapidement au-delà de 260 caractères

Ce qui précède a résolu mes problèmes.


0 commentaires