在Web应用程序上使用.NET 4.6.2的长路径问题

时间:2017-12-13 23:13:52

标签: asp.net .net

我正在构建一个需要使用长路径的ASP.NET Web应用程序。我将它定位到.NET 4.6.2并且一切都很完美,因为4.6.2默认情况下启用了长路径(Source),直到Windows 10创建者(RS2)更新。

突然,System.IO正在返回最大路径异常。我做了一些研究,发现This post。似乎发布Windows 10创建者(RS2)更新,为了使长路径工作,需要有一个app.mainfest

<application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings>
        <longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
    </windowsSettings>
</application>

我已经确认将app.manifest修改添加到控制台应用程序会带来长路径功能。唯一的问题是这是一个Web应用程序。我无法弄清楚如何将app.manifest的equivelant添加到Web应用程序中。

4 个答案:

答案 0 :(得分:3)

  

我无法弄清楚如何添加等效的app.manifest   到Web应用程序。

这不是完全标准的做法,但是您可以将清单添加到ASP .NET Web应用程序。如果您使用的是VS2017,它将类似于以下屏幕:

enter image description here

答案 1 :(得分:2)

您可以尝试在<startup>结束标记后的 web.config 中添加以下行:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false;Switch.System.IO.BlockLongPaths=false" />
</runtime>

来源:.NET 4.6.2 and long paths on Windows 10 (MSDN)

答案 2 :(得分:1)

您可以尝试使用regedit更改此设置:

  1. run regedit.exe作为管理员
  2. 找到[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]
  3. 将数据值[LongPathsEnabled] (DWORD)更改为1
  4. 关闭注册表编辑器并重新启动 Windows

这也应该解决ASP.NET的问题。

也可以通过
组策略来控制注册表项 Computer Configuration > Administrative Templates > System > Filesystem > Enable NTFS long paths

答案 3 :(得分:0)

您可以尝试在文件路径前面加上\\?\,以指定其长文件路径,该路径超过MAX_PATH,即260个字符。可以在下面的链接中找到更多信息:

https://docs.microsoft.com/en-gb/windows/desktop/FileIO/naming-a-file#maximum-path-length-limitation