App.config 我的文档宏

App.config My Documents macro

我试图在连接字符串中包含一个替换,这样我就可以不引用 C:\Users\<myid>\Documents,而是将用户特定的信息排除在外,让应用程序动态解析路径。我在另一个 SO 问题的答案中看到可以使用 ${AppData} 引用应用程序数据,但到目前为止我还没有找到类似的 variable/macro 来引用文档文件夹,甚至是基本用户文件夹。我试过 ${MyDocuments}${Documents},但无济于事,而且我无法在任何地方找到包含所有可能性的列表。有没有办法在不编写自定义配置代码的情况下做到这一点?如果这是唯一的出路,我不反对。但是,如果存在的话,我宁愿使用内置解决方案。

提供的间接寻址是|DataDirectory|,它是在AppDomain 中配置的。但这需要修改 .config 文件,这对于服务器式应用程序来说是非常合理的,但如果您只想从用户的主目录中获取文件,则不是您想要的那种东西。

最简单的方法是在运行时格式化字符串。您可以在应用程序设置中指定连接字符串,如下所示:

Server=.\SQLExpress;AttachDbFilename={0}\MyDataFile.mdf;Database=dbname

注意 {0},它允许您使用 String.Format():

插入目录
    var homedir = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
    var connstr = string.Format(Properties.Settings.Default.ConnectionString, homedir);

当用户想要一个完全不同的位置时,你仍然有一个后门,他只需将 app.exe.config 文件更改为他想要的目录。