2

設定プロパティを使用してapp.configを作成しようとする非常に簡単なアプリケーションがあります。 app.configはビルドされていますが、実行するとキーは値を取得しません。設定時にApp.configにアクセスできない

私はもともとプロジェクトからアプリケーション設定ファイルの追加を使用し、大きな成功を収めて手作りのapp.configをapp.configをの構築を渡していた以下の通りです:呼び出し元のクラスは、ここにある

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
    <appSettings> 
    <add key="Hosppath" value="C:\events\inbound"/> 
    <add key="Vendpath" value="C:\events\outbound"/> 
    <add key="Hospname" value="OBLEN_COB_Active_Inv_Advi_Daily_.csv"/> 
    <add key="Vendname" value="Advi_OBlen_Active_Inv_Ack_Daily_.csv"/> 
    <add key="Hospkey" value="invoice_number"/> 
    <add key="Vendkey" value="invoice"/> 
    <add key="Outpath" value="C:\events\Reports"/> 
    <add key="Outname" value="OB_Exception_Report_.xlsx"/> 
    <add key="Hospexcpt" value="O'Bleness Exceptions"/> 
    <add key="Vendexcpt" value="AdviCare Exceptions"/> 
    </appSettings> 
</configuration> 

using System; 
using System.Configuration; 

namespace LoadSettings 
{ 
    public static class ConfigReader 
    { 
     public static bool ReadAllSettings() 
     { 
      var success = false; 
      var appSettings = ConfigurationManager.AppSettings; 

      if(appSettings.Count > 0) 
      { 
       success = true; 
      } 
      return success; 
     } 

     public static string ReadSetting(string key) 
     { 
      string result = ""; 

      var appSettings = ConfigurationManager.AppSettings; 
      result = appSettings[key] ?? "Not Found"; 

      return result; 
     } 
    } 
} 

main()関数は次のようになります。

using System; 
using System.Configuration; 

namespace LoadSettings 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string hospPath; 
      string vendPath; 
      string hospName; 
      string vendName; 
      string hospKey; 
      string vendKey; 
      string rptPath; 
      string rptName; 
      string sht1Name; 
      string sht2Name; 

      if (ConfigReader.ReadAllSettings()) 
      { 
       hospPath = ConfigReader.ReadSetting("Hosppath"); 
       vendPath = ConfigReader.ReadSetting("Vendpath"); 
       hospName = ConfigReader.ReadSetting("Hospname"); 
       vendName = ConfigReader.ReadSetting("Vendname"); 
       hospKey = ConfigReader.ReadSetting("Hospkey"); 
       vendKey = ConfigReader.ReadSetting("Vendkey"); 
       rptPath = ConfigReader.ReadSetting("Outpath"); 
       rptName = ConfigReader.ReadSetting("Outname"); 
       sht1Name = ConfigReader.ReadSetting("Hospexcpt"); 
       sht2Name = ConfigReader.ReadSetting("Vendexcpt"); 

       Console.WriteLine("The hospital file path is:  {0}", hospPath); 
       Console.WriteLine("The vendor file path is:  {0}", vendPath); 
       Console.WriteLine("The hospital file name is:  {0}", hospName); 
       Console.WriteLine("The vendor file name is:  {0}", vendName); 
       Console.WriteLine("The hospital key field is:  {0}", hospKey); 
       Console.WriteLine("The vendor key field is:  {0}", vendKey); 
       Console.WriteLine("The exceptions report path is: {0}", rptPath); 
       Console.WriteLine("The exceptions report name is: {0}", rptName); 
       Console.WriteLine("The sheet1 tab name is:   {0}", sht1Name); 
       Console.WriteLine("The sheet2 tab name is:   {0}", sht2Name); 
      } 
     } 
    } 
} 

これはチャンピオンのように機能しますが、私が設定でそれを構築しようとすると、私は何も得られません。ここでの設定です:

Settings image

作成のapp.configが完全に正常になります。

Renamed to proper application_name.exe.config name

内部に、内容はセッティングに置かれたキーと値を一致:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
     <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > 
      <section name="OHS_RCIS.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" /> 
     </sectionGroup> 
     <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > 
      <section name="OHS_RCIS.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
     </sectionGroup> 
    </configSections> 
    <userSettings> 
     <OHS_RCIS.Properties.Settings> 
      <setting name="Hospkey" serializeAs="String"> 
       <value>invoice_number</value> 
      </setting> 
      <setting name="Vendkey" serializeAs="String"> 
       <value>invoice</value> 
      </setting> 
      <setting name="Column2" serializeAs="String"> 
       <value>curr_tot_acct_bal</value> 
      </setting> 
      <setting name="Column3" serializeAs="String"> 
       <value>COL_AGNCY_NAME</value> 
      </setting> 
      <setting name="Column4" serializeAs="String"> 
       <value>admit_date</value> 
      </setting> 
      <setting name="Column5" serializeAs="String"> 
       <value>discharge_date</value> 
      </setting> 
      <setting name="Column6" serializeAs="String"> 
       <value>create_date</value> 
      </setting> 
      <setting name="Column7" serializeAs="String"> 
       <value>HSP_ACCOUNT_ID</value> 
      </setting> 
      <setting name="Outpath" serializeAs="String"> 
       <value>C:\events\Reports</value> 
      </setting> 
      <setting name="Outname" serializeAs="String"> 
       <value>COB_OB_Advi_Placement_Exceptions_.xlsx</value> 
      </setting> 
      <setting name="Hospexcpt" serializeAs="String"> 
       <value>O\'Bleness Exceptions</value> 
      </setting> 
      <setting name="Vendexcpt" serializeAs="String"> 
       <value>AdviCare Exceptions</value> 
      </setting> 
      <setting name="Tab1Color" serializeAs="String"> 
       <value>FFFFE1FF</value> 
      </setting> 
      <setting name="Tab2Color" serializeAs="String"> 
       <value>FFE4E1FF</value> 
      </setting> 
      <setting name="ColumnCount" serializeAs="String"> 
       <value>7</value> 
      </setting> 
     </OHS_RCIS.Properties.Settings> 
    </userSettings> 
    <applicationSettings> 
     <OHS_RCIS.Properties.Settings> 
      <setting name="Hosppath" serializeAs="String"> 
       <value>C:\events\inbound</value> 
      </setting> 
      <setting name="Vendpath" serializeAs="String"> 
       <value>C:\events\outbound</value> 
      </setting> 
      <setting name="Hospname" serializeAs="String"> 
       <value>O\'Bleness Exceptions</value> 
      </setting> 
      <setting name="Vendname" serializeAs="String"> 
       <value>AdviCare Exceptions</value> 
      </setting> 
     </OHS_RCIS.Properties.Settings> 
    </applicationSettings> 
</configuration> 

app.configにアクセスするために使用されるコードは、結果を同軸化しようとしたいくつかの追加された行でこのように見えますS:

using System; 
using System.Configuration; 

namespace OHS_RCIS.Utility 
{ 
    public static class ConfigReader 
    { 
     public static bool ReadAllSettings() 
     { 
      var success = false; 
      ConfigurationManager.GetSection("userSettings"); 
      ConfigurationManager.RefreshSection("userSettings"); 
      var appSettings = ConfigurationManager.AppSettings; 

      if (appSettings.Count > 0) 
      { 
       success = true; 
      } 
      return success; 
     } 

     public static string ReadSetting(string key) 
     { 
      string result = ""; 

      var appSettings = ConfigurationManager.AppSettings; 
      result = appSettings[key] ?? "Not Found"; 

      return result; 
     } 
    } 
} 

The calls where it fails in Main()

は、私は明らかに、

References

のapp.configを適切に構築されて見ることができ、設定を通じてそれをやったときに何かが欠けているが、適切な参照を持っています私のテストスニペットと同じ一般的なコードを使用しています。

Seen through Debugger

任意の手がかり?

答えて

3

あなたはそれを間違って使用しています!私があなたの要求を完全に誤解しない限り...あなたがやっていることをやめてください!

組み込み設定メカニズムを使用する場合、Visual Studioは、すでにあなたのためにapp.configファイルとSettingsクラスを作成し、維持します。 app.configファイルの名前が変更され、ソリューションをビルドするときに出力ディレクトリにapplicationname.exe.configとしてコピーされます。

あなたがする必要があることは、自動生成プロパティを使用して設定にアクセスすることだけです。これは、アプリケーションとユーザーの設定で同様に機能します。あなたの例:

string s = Properties.Settings.Default.Hospkey; 

完了!これ以上何もない!完了

Properties.Settings.Default.UserSettingName = value; 
Properties.Settings.Default.Save(); 

:あなたは、ユーザーの設定を変更したい場合は

、このような何かを!これ以上何もない!

構成マネージャーの使用を中止するか、出力にapp.configファイルを含めないでください。それはデフォルトですべてあります!

ユーザー設定は、アプリケーションのGUI(たとえば設定ダイアログ)を使用してを変更できる値、またはアプリケーションの状態(ウィンドウの場所やMRUファイルなどを保持するなど)に応じて変更する必要があります。 )、どこかにユーザプロファイルの中に保存されます(それはどこにあってもかまいません)。また、そこから自動的に読み込まれます。

アプリケーションを更新すると、ビルドのデフォルト値になることがあります。その場合は、instructions hereに従ってください。 インストールフォルダ内の.exe.configファイルを変更することで、ユーザー設定を上書きすることはできません。最初の実行時にのみ読み込まれるためです。

アプリケーション設定は、ユーザーが変更できないデフォルト値です。必要に応じて.exe.configファイルでこれらを手動で変更できます。

+0

ありがとうThorsten!同僚は、設定を使用してapp.configファイルを作成する方法を私に示してくれて、私を助けてくれました。私は追加されたアプリケーション構成ファイルを使用することに戻しました。私はすでに "Properties.Settings.Default"構文を発見していましたが、必要なものは許可していません。これは、同様のレポートに使用されている同じコードに対して作成される柔軟なファイルである必要があり、永続的な設定はその目的を凌駕します。 –

+0

私はあなたの答えを上向きにしましたが、それが出てくるという評判はありません。 –

+0

その場合、設定を保存するために別のものを使用する必要があるかどうかです。カスタムXMLフォーマットですか? –

関連する問題