.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 делает...

0 ответов

Другие вопросы по тегам