2008-09-30 34 views
11

我們有一個動態加載dll的「引擎」(無論位於某個目錄中)並通過反射來調用它們的Workflow類。對於DLL的App.config

我們現在有一些新的工作流程需要訪問數據庫,所以我想我會把一個配置文件放在dll目錄中。

但由於某種原因,我的工作流程沒有看到配置文件。

<configuration> 
    <appSettings> 
     <add key="ConnectString" value="Data Source=officeserver;Database=mydatabase;User ID=officeuser;Password=officeuser;" /> 
    </appSettings> 
</configuration> 

鑑於上述配置文件,下面的代碼打印一個空字符串:

Console.WriteLine(ConfigurationManager.AppSettings["ConnectString"]); 

我想我要的是隻指定一個配置文件名,但我在這裏遇到的問題。我只是沒有得到結果。 任何人有任何指針?

+0

我想你應該參考我的視頻來獲得一些想法http://www.youtube.com/watch?v=juBDM3fb-i0 – 2014-01-07 10:51:36

回答

7

如果您的代碼示例讀取AppSettings在您的DLL中,那麼它將嘗試讀取應用程序的配置文件而不是該DLL的配置文件。這是因爲你使用了Reflection來執行代碼。

+0

謝謝。這解決了它。 – daharon 2008-09-30 20:55:03

4

有趣的是,我在這裏做的事情非常相似,配置文件加載得很好。在我們的例子中,我認爲每個新的配置文件的名稱都與它相關的程序集的名稱相匹配。因此,MyLibrary.dll將有一個名爲MyLibrary.dll.config的文件,其中包含該文件程序集的信息。另外,我有用的例子是使用VB.Net而不是C#(我們有一些),並且其中的所有設置都針對特定於VB的My.Settings命名空間,所以我們不直接使用ConfigurationManager類來閱讀它們。

自己看起來像這樣的設置:

<applicationSettings> 
    <MyLibrary.My.MySettings> 
     <setting name="SomeSetting" serializeAs="String"> 
      <value>12345</value> 
     </setting> 
    </MyLibrary.My.MySettings> 
</applicationSettings> 
0

如果我沒有記錯,在app.config將從應用程序目錄加載的,所以如果你是從其他目錄加載DLL,你會想他們需要在您的應用程序的配置文件中的鍵。

+0

謝謝。這似乎是我的問題。我改變了事情,現在它可以工作。 – daharon 2008-09-30 20:54:18

0

我不完全確定,但我認爲該類只能在AppDomain的入口方法的路徑(大部分時間的exe的路徑)下工作。 您需要首先調用OpenExeConfiguration(字符串exePath)(Framework 2.0及更高版本)以指向不同的配置文件。

1

我爲類似的系統寫了這個。我的回憶是,我用Assembly.GetExecutingAssembly來獲得DLL的文件路徑,附加.config到該名稱,加載它作爲XmlDocument,導航到<appSettings>節點,並將其傳遞給NameValueSectionHandlerCreate方法。

1

這裏有一種方法 - AppDomain.CurrentDomain.SetData(「APP_CONFIG_FILE」,「配置文件路徑」);

在構造函數中調用。

相關問題