2015-11-02 23 views
2

假設我有兩個應用程序A和B.應用程序A具有標準Settings.settings類型的配置。我已將A的設置設置爲public(而不是默認的internal)。引用B中的A並參照A.Settings.Default只會得到設計時默認值。沒有保存的用戶設置。調用Reload不起作用。從另一個可訪問的C#應用​​程序讀取用戶(不是應用程序)設置

更簡單的是,在LINQPad中輸入對A的引用,而傾銷A.Settings.Default只顯示默認值。與上面一樣有效。

即使在這裏,我發現了幾個類似的問題,但沒有一個有確切的答案。有沒有簡單的方法來做什麼似乎是一個微不足道的任務?

+0

非常抱歉。我首先誤解了你的問題,但現在修正了我的答案。 –

回答

1

讓我們假設你的應用程序是A.exe和B.exe。

B.exe references A.exe。

當運行A.exe時,它讀取/用戶設置從寫入/:

C:\Users\<user>\AppData\Local\A\A.exe_Url_ify12bcwso2vevlc4wawlllokphlsntr\1.0.0.0\user.config 

當運行B.EXE,它讀/寫的用戶設置(A.exe時),以/來源:

C:\Users\<user>\AppData\Local\B\B.exe_Url_vhnd4ku3yt2pxsldv3qsblquadzyhg3g\1.0.0.0\user.config 

我通過監控A和B EXE文件的磁盤活動與procmon.exe

正如你可以看到了這些路徑,用戶設置背後的邏輯其實是一樣的應用程序設置。運行時正在使用當前正在執行的進程的名稱來存儲用戶設置,因此無法從B.exe訪問A.exe的設置,因爲它們是從A.exe保存的。

這裏是我測試的代碼:

A.exe時:

static void Main(string[] args) 
{ 
    Console.WriteLine("A.Settings1.Default.AExeSetting1: {0}", A.Settings1.Default.AExeSetting1); 
    A.Settings1.Default.AExeSetting1 += "-"; 
    Console.ReadLine(); 
    A.Settings1.Default.Save(); 
} 

B.EXE:

static void Main(string[] args) 
{ 
    Console.WriteLine("A.Settings1.Default.AExeSetting1: {0}", A.Settings1.Default.AExeSetting1); 
    A.Settings1.Default.AExeSetting1 += "-"; 
    Console.ReadLine(); 
    A.Settings1.Default.Save(); 
} 
+0

感謝您的詳細解釋。但是,這是非常不幸和意外的。我想我必須再次重新發明輪子。 – wpfwannabe

+0

親愛的@wpfwannabe。我正在尋找解決方案,以幫助重新發明它。正如你所說,這項任務是微不足道的,需要加以解決。 –

相關問題