Приложение, над которым я работаю, должно обрабатывать файлы с очень длинными именами файлов / путей. Это приложение .Net 4.6, поэтому я применил обходной путь до 4.6.2, чтобы разрешить синтаксис \\? \, Обозначенный как здесь и здесь .
Это код, который я использую для включения функции (я не могу изменить app.config, так что это должно быть установлено в коде):
var type = Type.GetType("System.AppContext");
if (type != null)
{
AppContext.SetSwitch("Switch.System.IO.UseLegacyPathHandling", false);
AppContext.SetSwitch("Switch.System.IO.BlockLongPaths", false);
var switchType = Type.GetType("System.AppContextSwitches");
if (switchType != null)
{
// We also have to reach into System.AppContextSwitches and manually update the cached private versions of these properties (don't ask me why):
var legacyField = switchType.GetField("_useLegacyPathHandling", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
legacyField?.SetValue(null, (Int32)(-1)); // <- caching uses 0 to indicate no value, -1 for false, 1 for true.
var blockingField = switchType.GetField("_blockLongPaths", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
blockingField?.SetValue(null, (Int32)(-1)); // <- caching uses 0 to indicate no value, -1 for false, 1 for true.
}
}
Это работает (ууу!) На всех машинах, на которых мы тестировали, , за исключением одной (бу!). Рассматриваемый компьютер, как и другие, является установкой Windows 10 Pro и имеет те же параметры реестра, что и пространство имен [Computer \ HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ FileSystem].
Сообщение об ошибке на этом конкретном компьютере:
Указанный формат пути не поддерживается
Единственное отличие, которое мы видим на этом компьютере, заключается в том, что при просмотре очень длинного файла в проводнике Windows в поле «Местоположение» используется синтаксис \\? \ В меню r-click> Свойства.
Я предполагаю, что есть какой-то раздел реестра, который вызывает и эту разницу в File Explorer, и ошибку моего исправления, но где-то, кроме пространства имен FileSystem, упомянутого выше.
Кто-нибудь сталкивался с подобной проблемой или имеет представление о других областях реестра, которые могут иметь отношение к делу?