2011-03-03 54 views
1

這是我在工作中給予的任務。我們有一個Web應用程序,我創建了一個控制檯應用程序,可以通過計劃任務每​​天執行。我提出的任務是發現我們是否可以將ConApp.exe和ConApp.exe.config放在我們應用程序的兩個不同目錄(文件夾)中。我們希望將.exe文件與所有.dll文件放在bin文件夾中,並將.exe.config文件放在中央配置文件夾中。我一直在Visual Studio中查看屬性等,我沒有看到任何選項可以讓我指定ConApp.exe ConApp.exe.config的位置。如果.config位於另一個文件夾中,控制檯應用程序是否可以引用它的.exe.config?

有沒有辦法將這兩個文件放在單獨的文件夾中,還是需要放在同一個文件夾中,並且.exe​​.confing引用是一箇中央的.config文件?

謝謝:)

回答

0

所以從弗雷德裏克·莫克的幫助,我能找出這種解決方案。首先當您創建控制檯應用程序時,請勿在項目屬性窗口中創建任何設置。這將在您的項目中創建一個app.config文件,我相信如果它找不到它,可執行文件將嘗試查找並崩潰。當你第一次創建控制檯應用程序,然後在編寫任何代碼之前構建它。 Visual Studio只用可執行文件和一些支持文件創建Debug文件夾。然後我把這種碼在「主」函數:

Dim fileMap As ExeConfigurationFileMap = New ExeConfigurationFileMap() 

fileMap.ExeConfigFilename = "....../AppName.config" 

Dim externalConfig As Configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None) 

Dim appS As AppSettingsSection = externalConfig.Sections("appSettings") 

Dim reportURL As String = appS.Settings("URL").Value 

Console.Writeline(reportURL) 

在第二行「fileMap.ExeConfigFilename =」 ....../AppName.exe.config「然後」 ...... 「代表配置文件的完整路徑名,AppName是你的文件的名稱,現在我也嘗試從我的原始控制檯應用程序中複製代碼並運行它,但它仍然崩潰,我認爲這是由於.dlls,我我正在使用它調用數據庫上的存儲過程,我相信這些DLL正在尋找.config文件,因爲這是它們的構建方式,所以它們在同一個文件夾中。但是,如果你在開始編寫應用程序時要小心你可以像上面那樣使用Web.config信息。

1

你應該能夠使用ConfigurationManager.OpenExeConfiguration做到這一點。您可以在控制檯應用程序的配置文件中添加一個設置,指出配置文件的路徑和文件名,並將該值傳遞給OpenExeConfiguration(授予控制檯作爲具有對配置文件所在位置的讀取訪問權的帳戶運行存儲)。

請注意,如果您的控制檯應用程序包含像ConfigurationManager.AppSettings["somekey"]聲明,這些都需要一些改寫,讓他們使用由OpenExeConfiguration方法返回的Configuration對象。

0

只有當文件位於同一文件夾中時,.exe.config的自動發現纔有效。但你自己給出了答案恕我直言:讓.exe.config引用另一個.config文件在所需的中央位置。

0

不,您不能告訴您的應用程序在其主目錄app.config中查找其他目錄。

你可以做的是外化的某些配置部分,以便外部文件在另一個目錄:

<configuration> 
    <appSettings configSource="config\appSettings.config" /> 
    <connectionStrings configSource="config\connections.config" /> 
</configuration> 

這工作 - 儘管在Visual Studio的設計師將有大約這個投訴 - 任何.NET配置節(但上部分羣體,例如,你不能外部化整個<system.web><system.serviceModel>一次 - 你需要他們的子元素做

相關問題