我最近开始ResolveLibraryProjectImports: PathTooLongException在我的xamarin android项目中收到错误xamarin.forms.当我在网上查询时,所有解决方案都说要重新安置项目.有没有办法更改项目属性或重新映射的方法可以帮助我避免重新定位整个项目?
更新:
由于赏金和问题已经出现在下面,这就是为什么我正在寻找一个重新定位的替代解决方案:
目录层次结构是有原因的.如果不是每个人都会拥有整个文件夹的根.它们旨在让我们组织一切.我的情况也一样.我已经组织了所有基于云,代码,框架等的文件夹.在我使用的所有框架中,由于项目的内部需求,我从未重新定位项目.因此,我没有看到我需要将项目从所有这些文件夹中移出(这也意味着从云中移除)并将它们放在除了其他项目之外的某个位置的原因,只是因为项目要求它.
我在50%的WinXP SP3机器上遇到此例外.我知道大约260个字符的路径长度限制,但可以做什么?
我已经将文件命名为只有2个字符,没有任何子目录,但在一半的WinXP机器上,IsolatedStorage的路径已超过260个字符.
我在安装Visual Studion 2010扩展时遇到问题:
安装错误:System.IO.PathTooLongException:C:\ Users\felix.DOMAIN\AppData\Local\Microsoft\VisualStudio\10.0\Extensions\Vendor\Vendor 2011 Developer Tools\1.0\ProjectTemplates\CSharp\XYZ\1033\Vendor.XyzDeveloperTools .XyzPackageProject.zip
我通过双击.vsix文件安装扩展; 所以我没有选择缩短供应商2011开发者工具,比如VendorTools.是否还有其他(更多手动)方式来安装扩展程序?
顺便说一下,总长度是199个字符; 我认为它不到248个字符限制.如果它有所作为,我使用Win7 64位
所以我写一个程序作为我见过的程序是很慢的,这将重复文件扫描的计算机上,和/或内存猪,但我跑成PathTooLongException,当我试图整个驱动器.在C#代码中读取PathTooLongException后,我对以下两个问题感到好奇.
如果我每次更改级别时切换当前目录,是否会影响我的性能?
有没有更好的方法来获取所有文件的目录结构(可能通过调用tree.exe然后解析它)?
我的开源软件将远程文件夹同步到本地桌面.远程文件夹可以在Alfresco上,其中路径长度没有限制(/root/very/very/very/long/name.txt).
当开发应用程序我用System.IO.File.OpenWrite和System.IO.Stream.Write,但现在看来,他们不支持路径超过几百个字符,让用户喜欢报告错误PathTooLongException与长路径的工作时.
必须绝对避免使用UNC路径,因为它们会导致与某些应用程序不兼容.
在这种情况下应该使用哪些库/代码?
它必须是开源的C#.
我工作的地方,目录的名字很长,而且目录树也很长。
而且我遇到了外部应用程序中文件夹路径名太长的问题(我无法更改此外部应用程序,但我可以给它缩短的路径名)。
我知道微软操作系统可以缩短路径名,例如将C:\TooLongName\TooLongSubDirectory其转换为C:\TooLon~1\TooLon~1.
但是我怎样才能在 C# 中做到这一点并且仍然保持中殿有效和可用呢?
PS:我没有使用标准FileInfo和DirectoryInfo类,我仅使用将发送到我无法以任何方式更改的外部应用程序的字符串。
我正在将 C# 与.Net v4.7.2和Win10一起使用,并且我有一些长路径 ( >260 ) 的文件要复制。
我知道,有一个解决方案可以在路径前加上 \\?\
此前缀有效,但我不想每次都为任何文件操作添加前缀。从 .Net v4.6.2 开始,AppContext-Switches UseLegacyPathHandling和BlockLongPaths 提供了更好的解决方案。
然而,这是行不通的。
我的app.config看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2"/>
</startup>
<windowsSettings>
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
</windowsSettings>
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false;Switch.System.IO.BlockLongPaths=false" />
</runtime>
</configuration>Run Code Online (Sandbox Code Playgroud)
我的C# 代码如下所示:
public static void Main(string[] args)
{
string src = @"c:\Temp\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.txt";
string dst = @"c:\Temp\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-123.txt";
File.Copy(src, dst);
}Run Code Online (Sandbox Code Playgroud)
我的问题
使用 .Net v4.5 File.Copy() 抛出System.IO.PathTooLongException
使用 .Net v4.7.2 File.Copy() 抛出System.IO.DirectoryNotFoundException …
如果这些文件的完整路径超过260个字符,则无法枚举目录中包含的文件。以下代码显示了该问题:
void TestLongPath(DirectoryInfo testDirectory)
{
if (testDirectory.Exists)
{
try
{
testDirectory.GetFiles("SomeFileNamePattern*");
}
catch (System.IO.DirectoryNotFoundException)
{
Console.WriteLine("Long path test failed for " + testDirectory.FullName);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的app.manifest文件包含:
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
</windowsSettings>
</application>
Run Code Online (Sandbox Code Playgroud)
但是所有要做的就是将错误从PathTooLongException更改为DirectoryNotFoundException。
这是我的App.config:
<?xml version="1.0" encoding="utf-8"?><configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2"/>
</startup>
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false;Switch.System.IO.BlockLongPaths=false" />
</runtime></configuration>
Run Code Online (Sandbox Code Playgroud)
我在Windows 10 Pro上,使用Visual Studio 2019 16.1.1。我的目标是.NET 4.7.2。
如何枚举这些超长目录中的文件?它们位于我无法控制的共享网络驱动器上,因此重命名目录对我来说不是一种选择。
我有一些复制文件夹260+字符(例如麻烦:F:\ NNNNNNNNNNNNNNNN\NNNNNNNNNNN\ROOT\$ RECYCLE.BIN\S-1-5-21-3299053755-4209892151-505108915-1000\$ RMSL3U8 \nnnnnnnnn为NNNNNNNN\NNNNNNNNNNN\NNNNNNNNNN\NNNNNNNNNN \发布\应用程序文件\ TNNNNNNNNNNNN_1_0_0_0\NNNNNNNNNNNN.exe.manifest)与非标准DrectoryInfo.Create其他一些地方(); 添加\?\或\?\ UNC \(如 "\\?\ UNC \")只是把另一ArgumentException的.我究竟做错了什么?如果不使用Directory.SetCurrentDirectory(),我还能做些什么?
我在.Net 4.0中使用DirectoryInfo和FileInfo来枚举目录树中的文件,并且我遇到了PathTooLongException.简化版本如下
public static class Test
{
public static void Search(DirectoryInfo base)
{
foreach(var file in base.GetFiles())
{
try
{
Console.WriteLine(file.FullName);
} catch(PathTooLongException ex)
{
// What path was this?
}
}
foreach(var dir in base.GetDirectories())
{
Search(dir);
}
}
}
Run Code Online (Sandbox Code Playgroud)
抛出错误时,我想知道导致问题的文件路径.显然我不能要求,FullName因为这是错误的.我可以从名字file.Name,但如果我不能得到路径的其余部分file.Directory给出了一个PathTooLongException即使DirectoryInfo该文件是从运行良好找到了!(我不能使用它,因为实际的代码要复杂得多).
通过堆栈跟踪查看它似乎正在使用内部路径(我看到受保护file.FullPath的调试),并尝试从完整(超大)路径中撕掉目录.大多数问题似乎都涉及到System.IO.Path.NormalizePath,我听说在.Net 4.0中经历了一些变化.我还没有尝试过该框架的早期版本.
我的问题:
提前感谢任何帮助,
安迪
我知道创建项目时允许的最大路径长度为260个字符,目录为248个字符.但即使我的路径长度小于200个字符,我也会收到此错误.
我的解决方案文件位于此文件夹C:\ Users\username\Documents\Visual Studio 2010\Projects\Health12.Domain12.WardManagement => 88个字符 当我尝试添加名为"Health12.Domain12.WardManagement.Service"的新类库时.收到"这个解决方案,它给我路径太长的例外.
C:\ Users\username\Documents\Visual Studio 2010\Projects\Health12.Domain12.WardManagement\Health12.Domain12.WardManagement.Service.Contract => 138个字符
C:\ Users\username\Documents\Visual Studio 2010\Projects\Health12.Domain12.WardManagement\Health12.Domain12.WardManagement.Service.Contract\Health12.Domain12.WardManagement.Service.Contract.csproj => 195个字符
没有可能的文件或文件夹超过260个字符的限制.
如果我从"Health12.Domain12.WardManagement.Service.更改项目名称合同 ",以"Health12.Domain12.WardManagement.Service.精读 ",它工作正常.任何想法为什么visual studio不允许创建项目,即使它没有超过允许的最大长度限制.
c# ×8
.net ×3
path ×3
io ×2
windows ×2
exception ×1
fileinfo ×1
silverlight ×1
winapi ×1
windows-xp ×1