我正在尝试在连接字符串中包含替换,因此我可以将特定于用户的信息保留在其中,而不是引用C:\Users\<myid>\Documents
,并让应用程序动态解析路径。我在回答另一个SO问题时看到应用程序数据可以用${AppData}
引用,但到目前为止我还没有找到类似的变量/宏来引用Documents文件夹,甚至是基本用户文件夹。我已经尝试了${MyDocuments}
和${Documents}
,但无济于事,我找不到包含所有可能性的列表。有没有办法在不编写自定义配置代码的情况下执行此操作?如果这是唯一的出路,我不反对。但是,如果存在,我宁愿使用烘焙解决方案。
答案 0 :(得分:1)
提供的间接是| 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文件更改为他想要的目录。