2012-01-20 102 views
1

我需要讀取/寫入與任何exe無關的配置文件。我試試這個:找不到我的配置文件

 var appConfiguration = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap() { ExeConfigFilename = "SlamDunkSuper.config" }, ConfigurationUserLevel.None); 
     if(appConfiguration == null) { 

      //Configuration file not found, so throw an exception 
      //TODO: thow an exception here 
     } else { 

      //Have Configuration, so work on the contents 
      var fileEnvironment = appConfiguration.GetSection("fileEnvironment"); 
     } 

沒有引發異常,但fileEnvironment始終爲空。這裏是文件內容:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
     <section name="fileEnvironment" type="System.Configuration.NameValueSectionHandler"/> 
    </configSections> 

    <fileEnvironment> 
     <add key="DxStudioLocation" value="123456"/> 
    </fileEnvironment> 
</configuration> 

有人請帶我出曠野。我也不知道如何編寫或更改NameValueCollection中的條目,當我得到該部分的內容後。 感謝

+0

你有你的解決方案的幾個項目?項目中的配置文件是否是您的啓動應用程序? – Mharlin

+0

是的,將會有5個項目,其中三個需要訪問這個配置文件。 – JimBoone

+0

這是一個與任何exe無關的配置文件。我認爲我可以將其用作通用配置平臺。應用程序必須從一個主要的exe或運行每個項目的控制檯應用程序運行。 – JimBoone

回答

0

可以全球化AppSettingsSection有一些小的調整:

<section name="fileEnvironment" type="System.Configuration.AppSettingsSection"/> 

與消費:

 var appConfiguration = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap() { ExeConfigFilename = "SlamDunkSuper.config" }, ConfigurationUserLevel.None); 

     if (!appConfiguration.HasFile) // no need to null check, ConfigurationManager.OpenMappedExeConfiguration will always return an object or throw ArgumentException 
     { 
      //Configuration file not found, so throw an exception 
     } 
     else 
     { 
      var section = appConfiguration.GetSection("fileEnvironment") as AppSettingsSection; 
      if (section != null) 
      { 
       var dxStudioLocation = section.Settings["DxStudioLocation"].Value; 
      } 
     } 
-2

.NET中的配置文件被運行中的exe文件選擇,所以如果你有5個項目(4 DLL的和一個exe文件),並且每個項目都有不同的配置文件,當您將運行在您的應用程序exe文件,由他加載的DLL將認爲該exe文件的配置文件是他們的配置文件。

換句話說,要讀取dll項目的配置文件,您需要使用他的路徑明確打開它。

希望它有助於

+0

好的,所以你說的是我不能使用與exe無關的congif文件 – JimBoone

+0

你可以通過明確地閱讀它,你需要用他的完整路徑在文件上打開一些xml讀取器。 – OopsUser

+0

@OopsUser不正確。 OpenMappedExeConfiguration可以用來覆蓋任何路徑限制。 – KMoraz