2015-05-18 50 views
0

我們是一組C#/ .NET 4.5開發人員,負責處理相同的應用程序。如何使用依賴於環境的app.config文件

該應用程序具有一組與每個開發人員計算機相關的配置,例如連接到數據庫的字符串,網絡相關設置(代理,IP,憑證)以及更多。

由於應用增多,我們招致了很多環境的相關例如像配置:

  • 如果這是MYPC然後加載連接字符串我的電腦。
  • 如果這是XDeveloperPC,則指定代理的設置。

此外,如果新開發人員離開或加入組,則更新文件的過程將變成總體頭疼。維護文件變得非常困難,並且可能是錯誤和錯誤的來源。

我是在具有涉及每個開發環境,比如特定的app.config文件在想:

  • app_MyPC.config
  • app_XDeveloperPC.config

而當構建應用程序或然後執行指定要加載哪個應用程序的默認app.config。然後,當應用程序或任何類或方法引用給定的配置(如連接字符串)時,就像訪問app.config默認文件的位置一樣訪問此配置文件。

我不想創建一個在應用程序啓動時立即生成的配置類,因爲那時我應該從每個地方引用這個類,並且應用程序非常大,帶有一堆項目和dll。 我寧願聽到一些意見,你認爲應該是實現這一目標的最佳方式。

有沒有可能做到這一點? 如何? 你知道更好的方法嗎?

+0

查看使用[用戶設置](https://msdn.microsoft.com/en-us/library/bb397750%28v=vs.110%29.aspx)。它將涉及使用集中配置類的更改,但從長遠來看可能會更好。 –

+0

聽起來像你*應該*尋找集中配置管理的方法,特別是如果你想要管理訪問。從數據庫加載每個用戶的配置設置將使管理更容易 –

+0

1.使用默認值存儲在源代碼管理App.config中。 2.儘可能使用設置,而不是app.config。 3.如果您必須更改本地app.config,請不要將其提交到源代碼管理。 – Dennis

回答

-2

也許你可以使用machine.config文件(C:\ WINDOWS \ Microsoft.NET \框架\您的Framework版本\ CONFIG \ machine.config中)

+0

這不是一種可能性,在這種情況下,我必須包含所有正在開發的應用程序的所有連接字符串等,如果該文件被破壞,那麼所有我的環境會受到影響。 – mdarefull

0

僅供參考,請注意,.NET只加載一個配置整個應用程序的文件。你可以嘗試多個配置文件的東西像這裏規定,

Multiple App.Config Files in .NET Class library project

希望這有助於...

+0

不完全。您可以擁有不同的用戶設置文件,並且可以從單獨的配置文件加載每個配置部分 –

0

您可以指定要從另一個文件中加載的app.config的部分。 See this answer

但是,您可能需要自定義上述解決方案,app.config文件和配置方式。

另一種方法是使用自定義設置文件而不是app.config。這將需要更改一些代碼來使用配置文件。這個配置可以是XML或JSON文件(JSON很容易處理)。您可以使用繼承模型,其中通用設置來自一個文件,特定設置來自另一個文件等等。另外,您可以在運行時從此類文件加載設置,並即時更改應用程序行爲。

如果您決定使用自定義配置文件,並且已經有很多代碼考慮了App.config文件,那麼可以將app.config調用抽象爲方法,並讓該方法處理將設置拉到何處價值來自。這樣你可以最小化代碼更改並保持一切整潔。