已发布版本的路径中存在非法字符,但在调试模式下不存在
Illegal character in path in released version but not in debug mode
TL;DR 为什么在 运行 调试模式下我的应用程序可以工作,但在发布时却不行?
我正在使用 MVVM 加载文件路径来处理一些数据。当我使用调试器版本时,它可以很好地加载、验证和转换,但是当我使用 published/released 版本时,它会失败,所以我无法跟踪它发生的位置。需要注意的是,我们尝试使用长文件路径,因此我们包含了@"\\?\"
附上我们的转换器。
public static string CheckFilePath(string filePath)
{
//Network Location
if (filePath.StartsWith(@"\"))
{
filePath = filePath.TrimStart(@"\".ToCharArray());
return @"\?\unc\" + filePath;
}
//Local location
if (!filePath.StartsWith(@"\?\") && (!filePath.StartsWith(@"\") || !filePath.StartsWith(@"\?\UNC\")))
{
return @"\?\" + filePath;
}
return filePath;
}
我们还使用 4.6.2 并使用它来尝试容纳长文件路径。请注意,这只是我的转换器,用于检查它是否有 @"\\?\" 或 @"\\" 并将其替换为长路径所需的以下内容。这个转换器可能不是问题...任何帮助都会很棒!
好的,谢谢大家的帮助,但我找到了解决方法。事实证明我的发布版本与我的发布版本有点像 jdweng 所说的有问题。如果我只是 运行 发行版中的可执行文件它可以工作,但是当我尝试通过发布安装它时,它不会。
我正在使用 MVVM 加载文件路径来处理一些数据。当我使用调试器版本时,它可以很好地加载、验证和转换,但是当我使用 published/released 版本时,它会失败,所以我无法跟踪它发生的位置。需要注意的是,我们尝试使用长文件路径,因此我们包含了@"\\?\" 附上我们的转换器。
public static string CheckFilePath(string filePath)
{
//Network Location
if (filePath.StartsWith(@"\"))
{
filePath = filePath.TrimStart(@"\".ToCharArray());
return @"\?\unc\" + filePath;
}
//Local location
if (!filePath.StartsWith(@"\?\") && (!filePath.StartsWith(@"\") || !filePath.StartsWith(@"\?\UNC\")))
{
return @"\?\" + filePath;
}
return filePath;
}
我们还使用 4.6.2 并使用它来尝试容纳长文件路径。请注意,这只是我的转换器,用于检查它是否有 @"\\?\" 或 @"\\" 并将其替换为长路径所需的以下内容。这个转换器可能不是问题...任何帮助都会很棒!
好的,谢谢大家的帮助,但我找到了解决方法。事实证明我的发布版本与我的发布版本有点像 jdweng 所说的有问题。如果我只是 运行 发行版中的可执行文件它可以工作,但是当我尝试通过发布安装它时,它不会。