DOBON.NET DOBON.NETプログラミング掲示板過去ログ

アプリケーション構成ファイル

環境/言語:[XP]
分類:[.NET]

質問させて頂きたい事があります。

アプリケーション構成ファイル(App.Config)を任意のディレクトリから読み込むにはどうしたら良いのでしょうか?
任意の場所から読み込み、取得ができずに困っています。

どうか宜しくお願いします。
> アプリケーション構成ファイル(App.Config)を任意のディレクトリから読み込むにはどうしたら良いのでしょうか?

XmlDocument.Load() してしまうとか。
ご回答ありがとうございます。

説明が不足していたので補足させて頂きます。

app.configはWindowsアプリケーションプロジェクトに入っていないapp.configです。
そのapp.configを使用しているフォームからAppSettings("hoge")と言うように値を取得出来ないものかと悩んでいます。

このような事は出来ないのでしょうか?
お世話になります。

■No16410に返信(ぽんさんの記事)
まさにひどりさんの仰っている事なのですが、
こういう感じであれば出来ると思います。

Public Class Form4
  Inherits System.Windows.Forms.Form

#Region " Windows フォーム デザイナで生成されたコード "
#End Region

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim ofd As New OpenFileDialog
    ofd.Filter = "アプリケーション構成ファイル(*.exe.config)|*.exe.config"
    If ofd.ShowDialog() = DialogResult.OK Then
      MyAppSettings.AppConfigPath = ofd.FileName
    End If
    Console.WriteLine(MyAppSettings.Item("Comment"))
  End Sub
End Class

Public Class MyAppSettings

  Private Shared m_appConfigPath As String
  Private Shared m_currentLoadedPath As String
  Private Shared m_nodesList As System.Xml.XmlNodeList

  'exe.config のパス
  Public Shared Property AppConfigPath() As String
    Get
      Return m_appConfigPath
    End Get
    Set(ByVal Value As String)
      m_appConfigPath = Value
    End Set
  End Property

  Shared Sub New()
    'Default の パスを設定する
    Dim currentAsm As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
    Dim exeName As String = System.IO.Path.GetFileName(currentAsm.EscapedCodeBase)
    AppConfigPath = System.IO.Path.ChangeExtension(exeName, "exe.config")
    ReadAppConfig()
  End Sub

  Public Shared ReadOnly Property Item(ByVal key As String) As String
    Get
      If AppConfigPath = "" Then Return String.Empty
      If m_currentLoadedPath <> AppConfigPath Then
        'AppConfigPath で指定された XML を読み込む。
        ReadAppConfig()
      End If
      If m_nodesList Is Nothing Then Return String.Empty
      For Each node As System.Xml.XmlNode In m_nodesList
        If node.Attributes("key").Value = key Then
          Return node.Attributes("value").Value
        End If
      Next
      Return String.Empty
    End Get
  End Property

  Private Shared Sub ReadAppConfig()
    m_currentLoadedPath = AppConfigPath
    Dim xmlDoc As System.Xml.XmlDocument = New System.Xml.XmlDocument
    xmlDoc = New System.Xml.XmlDocument
    xmlDoc.Load(AppConfigPath)

    m_nodesList = xmlDoc.DocumentElement.SelectNodes("//configuration/appSettings/add")
  End Sub
End Class

DOBON.NET | プログラミング道 | プログラミング掲示板