簡體   English   中英

.NET .config HELL

[英].NET .config HELL

我有以下項目:

  1. MVC
  2. 控制台應用
  3. 類庫
  4. Windows表單應用程序
  5. COM庫

所有這些應用程序都需要使用單個配置文件。 據我所知,當web.config用於Web項目時,app.config文件適用於Windows,控制台應用程序和類庫。

需要在所有這些項目中訪問相同的配置。 我已經讀過建議使用機器配置文件,但我們不會總是有權訪問它,因此配置文件必須位於我們的解決方案中。

我不完全了解配置文件是如何構建的。 目前我寫了一個簡單的項目,我有以下內容:

  1. 用於存儲服務配置文件的類庫。 A試圖通過反思來做到這一點。
  2. 應該從類庫中讀取app.config的Windows應用程序。

當我執行以下代碼時,我希望得到一個包含測試值的配置文件:

_applicationSettings = ConfigurationManager.OpenExeConfiguration(
                    System.Reflection.Assembly.GetAssembly(typeof(WCSConfiguration)).Location
                    ).AppSettings;    

我得到的是一個空的應用程序設置文件。

類庫具有以下App.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="TestTextKey" value="TestTextValue"/>
  </appSettings> 
</configuration>

我已經嘗試使用.GetExecutingAssembly()方法,我期望返回當前正在執行的代碼的程序集。 這不起作用,而是返回了Windows應用程序的程序集。

GetAssembly(type(WCSConfiguration))已返回正確的程序集,但bin / debug目錄中缺少配置文件。

我有一種感覺,要么我做了一些根本錯誤的事情,要么微軟沒有做到足夠靈活。 我也試圖搜索MSDN以獲得解釋,但這並沒有很好地記錄在IMO中。

我還將COM保留為粗體,因為我不確定COM庫是否可以使用任何配置文件。 首先,我想讓其他項目工作。

我知道這是很多信息。 任何幫助都會受到高度贊賞。 以前我們選擇使用注冊表,但事實證明這很糟糕,主要是因為在某些情況下無法訪問注冊表。 此外,我們現在有多個版本的應用程序和分支之間的切換是一個半小時的工作:(

謝謝

編輯:

如果我將dll的配置部分添加到app.config,這意味着這些設置只能從該應用程序中獲得。 如果我錯了,請糾正我。 我提供的示例是縮小版本。 總共有大約十個Windows應用程序,一個MVC項目和一系列類庫,所有這些都需要使用該配置。

配置設置主要是連接字符串,不屬於數據庫的查找值以及其他一些小設置。 此時主要關注的是連接字符串。 應用程序的次要版本很少,每個版本都指向不同的數據庫。

我想要擺脫這個問題是一個很好的可行解決方案,以便可以在線發布,遇到同樣問題的其他人也不會花費幾天的時間。

故事的故事IMO:使用App.config和Web.config來存儲您自己的配置文件的位置。

編寫簡單的XML序列化程序來讀/寫配置和DLL以提供配置。

COM對象是一個很長的故事並且使用“hack”實現,因為COM DLL中沒有App.config或Web.config。

注意ConfigurationManager.OpenExeConfiguration需要傳遞配置文件的文件名,而不是可執行文件。

您需要將.config附加到可執行文件的路徑。 要獲得exe程序集,請使用Assembly.GetEntryAssembly

如果您有配置設置要分享多個不在同一個.NET進程中的代碼,我建議:

  • 把它們放在自己的myStuff.config
  • 在.NET代碼中,使用ConfigurationManager.OpenExeConfiguration打開並訪問myStuff.config
  • 非.NET代碼需要使用XML解析器來加載和讀取設置。 除非您的配置結構非常復雜,否則這不應該太難以封裝。
  • 將路徑放到myStuff.config中,共享適用於.NET應用程序的每個應用程序的app.config。 (非.NET應用程序:取決於適用於該應用程序的內容。)

另一種方法,其中配置結構相同但設置是每個應用程序將是自定義配置部分。

幾個一般要點 - 將dll的配置部分添加到app.config文件,而不是依賴於dll的配置文件來獲取; 並且app.config實際上在構建時被重命名為.exe.config,因此您需要確保該名稱的文件可用。

此外 - 您不必使用默認配置加載機制來配置您的應用程序。 您可以創建自己的配置類,只需使用XML序列化即可反序列化和配置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM