我将项目切换到.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确实......