【问题标题】:Application fails to read from app config if short path given如果给定短路径,应用程序无法从应用程序配置中读取
【发布时间】:2014-07-16 13:09:48
【问题描述】:

如果我指定一个文件的短路径并运行应用程序,那么它将无法从 exe.config 文件中获取设置。 例如,我在 app.config 中给出了以下设置

<setting name="test" serializeAs="String">
                <value>abc</value>
</setting>

在我的示例应用程序下面的代码中

Public Class Form1
    Dim aa As String = My.Settings.test

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        MsgBox(aa)
        End

    End Sub
End Class

它按预期显示abc

现在在调试文件夹中,如果我将设置更改为其他值,例如

<setting name="test" serializeAs="String">
                    <value>xyz</value>
</setting>

然后从调试文件夹运行应用程序(D:\Desktop\test\bin\Debug\test test 123.exe)然后它显示xyz,因为我已经更改了它。

但如果我指定文件的短路径(D:\Desktop\test\bin\Debug\TESTTE~2.EXE)并运行(可以从 Windows 运行),那么它会显示 abc 本身而不是 xyz。

那么为什么在给出短路径时应用程序无法读取应用程序配置文件?

编辑:您可以下载代码here 要查看错误,您可以使用长路径和短路径运行 \test\bin\Release\test test 123.exe 文件(我已将配置更改为 xyz 以设置测试)

【问题讨论】:

  • 是 My.Settings.test 应用程序还是用户设置?您是否尝试过在项目设置中进行同步?
  • @DavidSdot 它在 app.config 中
  • 所有的设置都在app.config里,但是有applicationSettings和userSettings,你的设置在哪个分支或者能不能显示整个app.config文件?

标签: c# vb.net app-config


【解决方案1】:

我不确定它为什么会失败,但是如果您在代码中需要 8.3 版本的路径,我建议将完整路径放在配置文件中,然后使用 Windows API 获取 8.3 路径。似乎没有本机 .NET 功能。但是,我在 CodeBlog 上找到了一些 sn-ps。

Convert long file name to short one

相关sn-p:

public static String GetShortPathName(String longPath)
{
    StringBuilder shortPath = new StringBuilder(longPath.Length + 1);

    if (0 == PathExtensions.GetShortPathName(longPath, shortPath, shortPath.Capacity))
    {
        return longPath;
    }

    return shortPath.ToString();
}

[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
private static extern Int32 GetShortPathName(String path, StringBuilder shortPath, Int32 shortPathLength);

【讨论】:

    猜你喜欢
    • 2015-10-06
    • 1970-01-01
    • 2018-05-13
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    • 2010-10-28
    • 1970-01-01
    • 2015-05-05
    相关资源
    最近更新 更多