VisualStudio PathTooLongException
VisualStudio PathTooLongException
我 运行 遇到 VisualStudio 的问题 - 2017 Pro 和 2019 Pro。如果我尝试打开我的解决方案,我会收到此错误:
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.

at System.IO.Path.LegacyNormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths)

at System.IO.Path.NormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths)

at System.IO.Path.InternalGetDirectoryName(String path)

at Microsoft.VisualStudio.ErrorListPkg.PathColumnDefinition.GetCachedDirectoryName(ITableEntryHandle entry)

at Microsoft.VisualStudio.ErrorListPkg.PathColumnDefinition.TryCreateStringContent(ITableEntryHandle entry, Boolean truncatedText, Boolean singleColumnView, String& content)

at Microsoft.VisualStudio.Shell.TableControl.TableEntryHandleExtensions.TryCreateStringContent(ITableEntryHandle entry, ITableColumnDefinition column, Boolean truncatedText, Boolean singleColumnView, String& content)

at Microsoft.VisualStudio.Shell.TableControl.Implementation.TableControl.GenerateFiltersForColumn(UpdateResults results, ITableColumnDefinition columnDefinition)

at Microsoft.VisualStudio.Shell.TableControl.Implementation.TableControl.UpdateEntryFilters(UpdateResults results, HashSet`1 variableColumns)

at Microsoft.VisualStudio.Shell.TableControl.Implementation.TableControl.UpdateEntries(HashSet`1 variableColumns, Boolean anyColumnChanges, List`1& frozenSinksAwaitingDisposal)

at Microsoft.VisualStudio.Shell.TableControl.Implementation.TableControl.<UpdateEntriesAsync>d__182.MoveNext()

--- End of stack trace from previous location where exception was thrown ---

at Microsoft.VisualStudio.Telemetry.WindowsErrorReporting.WatsonReport.GetClrWatsonExceptionInfo(Exception exceptionObject)</description>
</entry>
有什么方法可以准确找出错误的路径吗?
我怀疑是 SpecFlow addid 导致了这个问题。但是如果我禁用这个插件,什么都不会改变。
另一个队友使用相同的解决方案没有这个问题。
Windows,继承自 MS-DOS,使用简单 API 时的最大路径长度非常短。许多应用程序都将缓冲区固定到这个大小——寻找 MAX_PATH
——因此没有简单的方法可以让事情变得更长。当 10MB 是典型的 HDD 大小时,248 个字符很多。
NTFS 和 Win32 可以支持更长的路径(215-1 个字符),但需要以正确的方式使用 API。许多,甚至是积极开发的,都没有。
我怀疑 Visual Studio,即使在其最新版本中,更不用说所有扩展了,是否已完全更新以处理长路径。
检查您是否避免了解决方案根部的长路径(Visual Studio 的默认项目位置在这里没有帮助)。
我以某种方式摆脱了这条错误信息。我不明白怎么做,但让我分享一下我做的步骤。
- 我开始一个一个地从解决方案中删除项目,以找出导致问题的项目。
一旦发现错误,我就恢复了 GIT 上的所有更改。
我对这个项目中的文件和文件夹重复了这种方法。当我删除一些文件并重新启动VS时,问题消失了。
再次还原 GIT 上的所有更改。
瞧,这个错误在 2017 年和 2019 年都是历史记录。SLN 或 CSPROJ 文件中没有任何变化。
因为我的路径很长,所以我 运行 也遇到了其中的一些 PathTooLongExceptions。
这是特别的。 VS项目使用相对路径时的情况。
显然缩短路径会解决很多问题。
但是在对您的开发环境进行这种相当耗时的全面检查之前,您可以做一些事情:
- 使用具有较短路径的符号链接或连接点(例如 mklink /J M.E.D.A
Microsoft.Extensions.DependencyInjection.Abstractions) 并在您的项目文件中使用它们
- 使用绝对路径:相对路径在幕后可能会变得非常长,因为 Visual Studio 可能指的是 %(FullPath),它很快就会超过 260 个字符
以上解决了我的问题。
我 运行 遇到 VisualStudio 的问题 - 2017 Pro 和 2019 Pro。如果我尝试打开我的解决方案,我会收到此错误:
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.

at System.IO.Path.LegacyNormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths)

at System.IO.Path.NormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths)

at System.IO.Path.InternalGetDirectoryName(String path)

at Microsoft.VisualStudio.ErrorListPkg.PathColumnDefinition.GetCachedDirectoryName(ITableEntryHandle entry)

at Microsoft.VisualStudio.ErrorListPkg.PathColumnDefinition.TryCreateStringContent(ITableEntryHandle entry, Boolean truncatedText, Boolean singleColumnView, String& content)

at Microsoft.VisualStudio.Shell.TableControl.TableEntryHandleExtensions.TryCreateStringContent(ITableEntryHandle entry, ITableColumnDefinition column, Boolean truncatedText, Boolean singleColumnView, String& content)

at Microsoft.VisualStudio.Shell.TableControl.Implementation.TableControl.GenerateFiltersForColumn(UpdateResults results, ITableColumnDefinition columnDefinition)

at Microsoft.VisualStudio.Shell.TableControl.Implementation.TableControl.UpdateEntryFilters(UpdateResults results, HashSet`1 variableColumns)

at Microsoft.VisualStudio.Shell.TableControl.Implementation.TableControl.UpdateEntries(HashSet`1 variableColumns, Boolean anyColumnChanges, List`1& frozenSinksAwaitingDisposal)

at Microsoft.VisualStudio.Shell.TableControl.Implementation.TableControl.<UpdateEntriesAsync>d__182.MoveNext()

--- End of stack trace from previous location where exception was thrown ---

at Microsoft.VisualStudio.Telemetry.WindowsErrorReporting.WatsonReport.GetClrWatsonExceptionInfo(Exception exceptionObject)</description>
</entry>
有什么方法可以准确找出错误的路径吗? 我怀疑是 SpecFlow addid 导致了这个问题。但是如果我禁用这个插件,什么都不会改变。
另一个队友使用相同的解决方案没有这个问题。
Windows,继承自 MS-DOS,使用简单 API 时的最大路径长度非常短。许多应用程序都将缓冲区固定到这个大小——寻找 MAX_PATH
——因此没有简单的方法可以让事情变得更长。当 10MB 是典型的 HDD 大小时,248 个字符很多。
NTFS 和 Win32 可以支持更长的路径(215-1 个字符),但需要以正确的方式使用 API。许多,甚至是积极开发的,都没有。
我怀疑 Visual Studio,即使在其最新版本中,更不用说所有扩展了,是否已完全更新以处理长路径。
检查您是否避免了解决方案根部的长路径(Visual Studio 的默认项目位置在这里没有帮助)。
我以某种方式摆脱了这条错误信息。我不明白怎么做,但让我分享一下我做的步骤。
- 我开始一个一个地从解决方案中删除项目,以找出导致问题的项目。
一旦发现错误,我就恢复了 GIT 上的所有更改。
我对这个项目中的文件和文件夹重复了这种方法。当我删除一些文件并重新启动VS时,问题消失了。
再次还原 GIT 上的所有更改。
瞧,这个错误在 2017 年和 2019 年都是历史记录。SLN 或 CSPROJ 文件中没有任何变化。
因为我的路径很长,所以我 运行 也遇到了其中的一些 PathTooLongExceptions。 这是特别的。 VS项目使用相对路径时的情况。 显然缩短路径会解决很多问题。
但是在对您的开发环境进行这种相当耗时的全面检查之前,您可以做一些事情:
- 使用具有较短路径的符号链接或连接点(例如 mklink /J M.E.D.A Microsoft.Extensions.DependencyInjection.Abstractions) 并在您的项目文件中使用它们
- 使用绝对路径:相对路径在幕后可能会变得非常长,因为 Visual Studio 可能指的是 %(FullPath),它很快就会超过 260 个字符
以上解决了我的问题。