2016-11-22 26 views
0

コードが実行されていない実行ファイルの構成ファイル(exefilename.config)を編集する必要があります。私は "DefaultPort" パラメータ、 "データソース" などを変更する必要があります。..と同じレベルに新しいものを追加すること別の実行可能ファイルの.configファイルを編集する

<configSections> 
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <section name="XNet.XNetService.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/> 
     <section name="XNetService.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/> 
    </sectionGroup> 
</configSections> 
<applicationSettings> 
    <XNet.XNetService.Properties.Settings> 
     <setting name="DataSource" serializeAs="String"> 
      <value>192.168.2.127</value> 
     </setting> 
     <setting name="DefaultPort" serializeAs="String"> 
      <value>8085</value> 
     </setting> 
     <setting name="UserName" serializeAs="String"> 
      <value>notiuser</value> 
     </setting> 
     <setting name="Password" serializeAs="String"> 
      <value>6ITLet6k1HCOhgTmXI5C/1m1DrCQli8dIAKfdtP+o6w=</value> 
     </setting> 
     <setting name="Instance" serializeAs="String"> 
      <value /> 
     </setting> 
     <setting name="bindTo" serializeAs="String"> 
      <value /> 
     </setting> 
    </XNet.XNetService.Properties.Settings> 
</applicationSettings> 

:XMLファイル形式はこれです。どのようにできるのか? .configファイルが私の実行ファイルのものだった場合、シンプルなSettingsWriterを使うと状況がはるかに簡単になりますが、どうすればいいですか?

+0

は、このSO質問を見てみましょう/ using- configurationmanager-to-any-config-any-any-locationから – Klinger

+0

私はあなたが手動で別のアプリケーションの設定を読み込んでいるので、この問題があると仮定しています。どうしてあなたは_your_appの設定にconfigをコピーして、それにふさわしい設定を使うのですか?または、ユーザーレベルの設定を使って書き戻しが簡単にできますか? –

+0

Klinger私は以下のように答える – user3518663

答えて

1

Web設定は単なるXMLなので、なぜそれを1つとして扱わないのですか?

void ModifyConfig(string filepath, string xpath, string newValue) 
    { 
     System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); 
     doc.Load(filepath); 
     System.Xml.XmlNode elementToReplace = doc.DocumentElement.SelectSingleNode(xpath); 
     elementToReplace.InnerText = newValue; 
     doc.Save(filepath); 
    } 

をし、それが好き呼び出す:これらの線に沿って何かは、トリックを行う必要があり、ファイルがが使用されている場合

 ModifyConfig("C:\\temp\\App.config", 
      "applicationSettings//XNet.XNetService.Properties.Settings//setting[@name='DefaultPort']//value", 
      "5000"); 

あなたが問題を取得する可能性があります。

0

このスレッドに記述されているコードは、Alex Nolascoが提案したChange default app.config at runtimeを実装しています。

しかし、私はプロパティを読み取ろうと「データソース」以下descripted、私はまだ

// the default app.config is used. 
using (AppConfig.Change(exePath)) 
{ 
    // the app.config in exePath is used 

    string test = Properties.Settings.Default.DataSource; 

} 
// the default app.config is used. 

:-(元の.config値を取得するように私には疑問があります。私は、一時的な設定ファイルを。?違うassembyを持って読んでするつもりはこれが問題になる可能性が

これはのAppConfigコードです:http://stackoverflow.com/questions/4738:

using System; 
using System.Configuration; 
using System.Linq; 
using System.Reflection; 

namespace XNet.XManager 
{ 
    public abstract class AppConfig : IDisposable 
    { 
     public static AppConfig Change(string path) 
     { 
      return new ChangeAppConfig(path); 
     } 

     public abstract void Dispose(); 

     private class ChangeAppConfig : AppConfig 
     { 
      private readonly string oldConfig = AppDomain.CurrentDomain.GetData("APP_CONFIG_FILE").ToString(); 

      private bool disposedValue; 

      public ChangeAppConfig(string path) 
      { 
       AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", path); 
       ResetConfigMechanism(); 
      } 

      public override void Dispose() 
      { 
       if (!disposedValue) 
       { 
        AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", oldConfig); 
        ResetConfigMechanism(); 


        disposedValue = true; 
       } 
       GC.SuppressFinalize(this); 
      } 

      private static void ResetConfigMechanism() 
      { 
       typeof(ConfigurationManager) 
        .GetField("s_initState", BindingFlags.NonPublic | BindingFlags.Static) 
        .SetValue(null, 0); 

       typeof(ConfigurationManager) 
        .GetField("s_configSystem", BindingFlags.NonPublic |BindingFlags.Static) 
        .SetValue(null, null); 

       typeof(ConfigurationManager) 
        .Assembly.GetTypes() 
        .Where(x => x.FullName == 
           "System.Configuration.ClientConfigPaths") 
        .First() 
        .GetField("s_current", BindingFlags.NonPublic | BindingFlags.Static) 
        .SetValue(null, null); 
      } 
     } 
    } 
} 
関連する問題