【问题标题】:update app.config file programmatically with ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);使用 ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None) 以编程方式更新 app.config 文件;
【发布时间】:2014-03-16 15:23:49
【问题描述】:

以编程方式更新 app.config 文件

配置配置 = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

这是我的 xml

<configuration>
  <configSections>
    <section name="nhibernateSettings" type="ProjectBase.Data.OpenSessionInViewSection, ProjectBase.Data" />
  </configSections>
  <appSettings>
    <add key="NHibernateConfigPath" value="D:\PROJEKTI\crawler\WebCrawlerSuite\ViaMura.Web\NHibernate.config" />
    <!--<add key="NHibernateConfigPath" value="C:\_ZAGON\ViaMura\CurrencyApp\at\NHibernate.config" />-->
    <add key="ClientSettingsProvider.ServiceUri" value="" />
  </appSettings>
  <connectionStrings>
    <add name="connectionString" connectionString="Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Viamura_at;Data Source=.\SQL2008" providerName="System.Data.SqlClient" />
    <!--<add name="connectionString" connectionString="server=193.37.152.24\SQL2008;User Id=DBUser;password=Lualah8991;database=Viamura_at" providerName="System.Data.SqlClient" />-->
  </connectionStrings>
  <nhibernateSettings>
    <!-- List every session factory that will be needed; transaction management and closing sessions 
          will be managed with the open-session-in-view module -->
    <sessionFactories>
      <clearFactories />
      <sessionFactory name="WebCrawlerFactory" factoryConfigPath="D:\PROJEKTI\crawler\WebCrawlerSuite\ViaMura.Web\NHibernate.config" isTransactional="true" />
      <!--<sessionFactory name="WebCrawlerFactory" factoryConfigPath="C:\_ZAGON\ViaMura\CurrencyApp\at\NHibernate.config" isTransactional="true" />-->
    </sessionFactories>
  </nhibernateSettings>

如何以编程方式编辑 WebCrawlerFactory?我正在使用

配置配置 = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

【问题讨论】:

标签: c#


【解决方案1】:

您可以使用以下代码:

private void UpdateConfig(string key, string value, string fileName)
{
    var configFile = ConfigurationManager.OpenExeConfiguration(fileName);
    configFile.AppSettings.Settings[key].Value = value;

    configFile.Save();
}

其中:fileName 是完整路径 + 应用程序名称 (c:\project\application.exe)

在您的情况下,按部分更改 AppSetting:

configFile.Sections["nhibernateSettings"]

【讨论】:

  • 我收到此错误:System.NullReferenceException: '对象引用未设置为对象的实例。'
  • 文件名 = System.Reflection.Assembly.GetEntryAssembly().Location; // 完整路径 + 应用名称
【解决方案2】:

ProjectBase.Data.OpenSessionInViewSection 表明已经定义了一个自定义配置部分,允许访问配置设置。然而,它可能受到保护或在 NHibernate 内部。

看看您是否可以引用该类来访问设置。

您也可以自己创建自定义配置部分,但是这会导致 NHibernate 配置不正确,因为它无法正确加载配置部分。

How to: Create Custom Configuration Sections Using ConfigurationSection

【讨论】:

  • 它实际上看起来像 ProjectBase.Data.OpenSessionInViewSection 与 NHibernte 无关。话虽如此,我认为它不会干扰 NHibernate。
猜你喜欢
  • 2014-04-09
  • 2018-12-13
  • 2014-07-17
  • 1970-01-01
  • 1970-01-01
  • 2015-08-22
  • 2011-10-19
  • 1970-01-01
相关资源
最近更新 更多