.Net 4.6.2 Обработка длинных путей в C# - исключение Ilegal Character выдается только в сборке выпуска
Я переключил свой проект на.Net 4.6.2, чтобы избежать проблем MAX_PATH. Я также читал, что добавление "\\?\" Позволяет использовать более длинные пути. Я так и сделал, но теперь у меня странная проблема. При сборке с конфигурацией отладки она работает, пока сборка конфигурации выпуска выдает "Недопустимые символы в пути". Исключение при выполнении, например, это:
DirectoryInfo di = new DirectoryInfo(ConfigManager.PluginPath);
Между ними нет никаких изменений, и составленный путь является одинаковым в обоих случаях согласно отладчику.
В настоящее время я понятия не имею, что происходит не так, потому что все проекты переведены на 4.6.2, и это не зависит от конфигурации. Или я здесь пропускаю вариант?
public string AppPathRoot {
get {
// INFO: using long path prefix to prevent problems with MAX_PATH constraint
return string.Format("\\\\?\\{0}", Path.GetDirectoryName(Application.ExecutablePath));
//return Path.GetDirectoryName(Application.ExecutablePath);
}
}
РЕДАКТИРОВАТЬ: я тем временем попробовал очень простую среду, используя консольное приложение, чтобы убедиться, что никаких побочных эффектов. Интересно, что теперь он выбрасывает в обоих случаях, поэтому нет разницы между выпуском / отладкой. Путь существует. Я строю это с VS2013 на Windows 7.
class Program
{
static void Main(string[] args)
{
string sPathL = "\\\\?\\C:\\temp";
string sPath = "C:\\temp";
// doesn't throw
DirectoryInfo di = new DirectoryInfo(sPath);
// throws
DirectoryInfo di2 = new DirectoryInfo(sPathL);
}
}
Edit2: похоже, что VS2013 ведет себя не так, как VS2017. VS2017 не дает никаких исключений, VS2013 делает...