.Net 4.6.2 Обработка длинных путей в C # - исключение Ilegal Character выдается только в сборке выпуска - PullRequest
0 голосов
/ 24 апреля 2018

Я переключил свой проект на .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 не делает ...

...