.Net 4.6.2 C#长路径处理 - 仅在发布版本中抛出的非法字符异常

时间:2018-04-24 11:48:54

标签: c# visual-studio-2013 .net-4.6.2 long-filenames

我将项目切换到.Net 4.6.2以避免MAX_PATH问题。我还读到前缀“\\?\”允许更长的路径。我这样做但现在有一个奇怪的问题。使用调试配置构建时,它正在工作,而发布配置版本正在抛出“路径中的非法字符”。做例如这样:

DirectoryInfo di = new DirectoryInfo(ConfigManager.PluginPath);

根据调试器,两者之间没有变化,组合路径相同。

我目前还不知道出了什么问题,因为所有项目都切换到4.6.2而afaik这不依赖于配置。或者我在这里错过了一个选项?

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);
    }
}

编辑: 我同时尝试使用控制台应用程序的非常简单的环境,以确保没有副作用。有趣的是,它现在抛出两种情况,所以发布/调试之间没有区别。路径是存在的。我在Windows 7上用VS2013构建它。

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 个答案:

没有答案