2012-11-12 134 views
4

我的問題很簡單。我有一個第三方庫,它假定它將被用於網站(需要web.config中的特殊配置部分)。我想在C#控制檯應用程序中使用這個庫。有可能的?是否可以從控制檯應用程序加載web-config?

我試過 WebConfigurationManager.OpenWebConfiguration(); 以及只是將所有內容複製到app.config但它不起作用。我收到的錯誤是ConfigurationErrorsException,說明 An error occurred creating the configuration section handler for ...: Could not load type 'Configuration.RenderingSection' from assembly 'System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.

回答

1

改爲使用app.config

與web.config完全相同的語法,選項等,但對於控制檯和WinForms應用程序。

另外,看看here,我還沒有測試它,但它似乎工作的傢伙。但是,如果你的項目與web無關,我仍然會建議使用app.config。

+4

對於相同的設置,有很多.config文件並不是一個好主意。當控制檯應用程序與網站一起部署時,將所有設置集中在一個文件中是明智的。請考慮一個依賴於控制檯應用程序啓動定期批處理的Web系統。 –

6

結賬OpenMappedExeConfigurationExeConfigurationFileMap

此方法允許您打開一個命名的配置文件,而不是「默認」myapp.exe.config。

ExeConfigurationFileMap configFileMap = new ExeConfigurationFileMap(); 
configFileMap.ExeConfigFilename = "custom.config"; 

// Get the mapped configuration file 
config = ConfigurationManager.OpenMappedExeConfiguration(
    configFileMap, ConfigurationUserLevel.None); 

這將加載任何舊的配置文件。但看看你的問題,我認爲你真正的問題可能是其中一個參考。 Configuration.RenderingSection在哪裏定義?它是否包含在您的項目中?它需要。

如果您很高興定義了Configuration.RenderingSection ,則可能需要開始查看Assembly Resolvers

1

您可以通過AppDomain.CurrentDomain.SetData(string name, Object data)來設置APP_CONFIG_FILE

string webconfigPath = "whatever......../web.config"); 
string webconfigDir = Path.GetDirectoryName(configPath); 

AppDomain.CurrentDomain.SetData("APPBASE", webconfigDir); 
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", webconfigPath); 

這是很容易,你會得到的控制檯應用程序(的cron)和Web應用程序相同的設置。

+1

簡單而簡單。可能我建議你改變你提供的例子來使用web.config的實際僞路徑而不是「任何......./web.config」。只爲清晰 – Loligans

+0

@Loligans我不知道實際的路徑。我想這取決於你的項目的相對位置。 – qub1n

相關問題