2016-07-06 7 views
0

私はコンソールプログラム 'A'を持っており、ある時点でプログラム 'B'とプログラム 'C'を実行します。しかし、私はapp.configの各プログラムとの関連付けに問題があります。基本的にプログラムAは、別のコンソールアプリケーションを呼び出すラッパークラスです。app.configはありませんが、現在実行中のプログラムのapp configを使用する必要があります。だから理論的には、プログラムBとプログラムCの2つのapp.configのみが必要です。c#exe内の埋め込み設定ファイル

プログラムAを実行してプログラムBを実行すると、プログラムBのapp.configを使用して情報を取得し、プログラムCが実行された後、プログラムCのapp.configを使用する必要があります。

これを行う方法はありますか?現在、私はこれをやっている:

var value = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location).AppSettings.Settings["ProgramBKey"].Value; 

それは動作していないようです。私はAssembly.GetExecutingAssembly().Locationのデバッグをチェックしました。\ bin \ Debug \ ProgramB.exeと 'ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly()。Location).AppSettings'は、以下に示すようにキー値がある場合Count = 0で設定しています。

サンプルコードプログラムA:プログラムBのための

static void Main(string[] args) 
{ 
    if(caseB) 
     B.Program.Main(args) 
    else if(caseC) 
     C.Program.Main(args) 
} 

サンプルのapp.config:

<?xml version="1.0"?> 
<configuration> 
    <appSettings> 
    <add key="ProgramBKey" value="Works" /> 
    </appSettings> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" /> 
    </startup> 
</configuration> 
+0

これらの他の '.exe'プログラムはどうやって起動していますか? – Adam

+0

これらはすべてコンソールアプリケーションです –

+0

単純な 'Applicaton.Run()'コールですか? – Adam

答えて

1

私にとっては、全体の事は "設計上の問題" のように聞こえます。 Programm Aの設定でProgramm Bを開く必要があるのはなぜですか?

あなたはこれらすべてのプログラムの作成者ですか?代わりに、dllファイルを使用することができます。これにより、すべてのコードが実行されているProgrammの設定で実行されるので、トラブルを回避できます。

+0

プログラムBはA独立したコンソールアプリケーションそのもの。それは私がそれをdllにすることができなかった理由です。しかし、もし私がそれらをdllに作っていたら(はい、私はすべてのプログラムの作者です)、app.configの問題を解決するでしょうか? –

+0

例えば、ユーザーは他のプログラムから独立してプログラムBを実行できます。プログラムAは、Bを実行する必要があるのか​​、Cを実行する必要があるのか​​、または両方を実行する必要があるかを判断するヘルパーに過ぎません。 –

+0

質問を更新しました –

2

編集:この質問は、元の投稿からこの質問に関連しています。「プログラムのexe内でBとCのapp.configをコンパイルすることは可能ですか?」

Embedded Resource」機能を使用できます。ここでは、埋め込みリソースとして含まれていますXMLファイルを使用しての小さな一例です:

public static class Config 
{ 
    static Config() 
    { 
     var doc = new XmlDocument(); 
     using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Fully.Qualified.Name.Config.xml")) 
     { 
      if (stream == null) 
      { 
       throw new EndOfStreamException("Failed to read Fully.Qualified.Name.Config.xml from the assembly's embedded resources."); 
      } 

      using (var reader = new StreamReader(stream)) 
      { 
       doc.LoadXml(reader.ReadToEnd()); 
      } 
     } 

     XmlElement aValue = null; 
     XmlElement anotherValue = null; 

     var config = doc["config"]; 
     if (config != null) 
     { 
      aValue = config["a-value"]; 
      anotherValue = config["another-value"]; 
     } 

     if (aValue == null || anotheValue == null) 
     { 
      throw new XmlException("Failed to parse Config.xml XmlDocument."); 
     } 

     AValueProperty = aValue.InnerText; 
     AnotherValueProperty = anotherValue.InnerText; 
    } 
} 
+1

質問を更新しました。この回答は前のコンテキストで正しいです...しかし、私は質問が十分にはっきりしていないと思います –

1

あなたは同じ設定ファイルを使用して複数のアプリケーションを持つことができます。このようにして、アプリケーションを切り替えると、両方とも設定ファイルの独自の部分を見つけることができます。

私は通常それを行う方法は、まず、各アプリケーションは、「自身のことを行う」しましょう...で、その後、設定ファイルBに設定ファイルAの関連するセクションをコピー

それは次のようになります。

<configSections> 
    <sectionGroup> 
     <sectionGroup name="applicationSettings"...A> 
     <sectionGroup name="userSettings"...A> 
     <sectionGroup name="applicationSettings"...B> 
     <sectionGroup name="userSettings"...B> 

<applicationSettings> 
    <A.Properties.Settings> 
    <B.Properties.Settings> 

<userSettings> 
    <A.Properties.Settings> 
    <B.Properties.Settings> 
+0

プログラムBの設定ファイルに変更がある場合、変更された部品のプログラムAの設定ファイルも更新しますか?したがって、プログラムのいずれかに変更があるたびにapp.config(ProgramA用)の更新が必要です –

+0

質問が更新されました –

関連する問題