Я переключил свой проект на .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);
}
}
EDIT:
Тем временем я попробовал очень простую среду, используя консольное приложение, чтобы избежать побочных эффектов. Интересно, что теперь он выбрасывает в обоих случаях, поэтому нет разницы между выпуском / отладкой. Путь существует. Я строю это с 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 не делает ...