2015-08-26 25 views
0

我想在連接字符串中包含一個替換,以便不用引用C:\Users\<myid>\Documents,我可以將用戶特定的信息從其中刪除,並讓應用程序動態地解析路徑。我在另一個SO問題的答案中看到,應用程序數據可以用${AppData}引用,但迄今爲止我還沒有找到用於引用Documents文件夾甚至基本用戶文件夾的類似變量/宏。我試過${MyDocuments}${Documents},但無濟於事,我找不到包含所有可能性的列表。有沒有辦法做到這一點,而無需編寫自定義配置代碼?我不反對,如果這是唯一的出路;但是,如果存在解決方案,我寧願使用烘焙解決方案。App.config我的文檔宏

+0

您可以向我們展示您的代碼的相關部分,指定這是什麼類型的.NET應用程序,並提供有關使用您找到的「$ {AppData}」的參考? – sstan

回答

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文件更改爲他想要的目錄即可。

+0

我喜歡你的解決方案,它非常優雅。試圖查看是否有一種方法可以在app.config中動態指定路徑,但是,似乎您對該問題說「不」。 –