【问题标题】:System.Configuration.ConfigurationSettings.AppSettings not accessible in productionSystem.Configuration.ConfigurationSettings.AppSettings 在生产中无法访问
【发布时间】:2013-07-03 08:23:01
【问题描述】:

我有一个 Windows 桌面应用程序,从中启动一个 Web 应用程序。

private void Home_Load(object sender, EventArgs e)
       {
           string url = string.Format("http://localhost:49916/Express/Login.aspx?yek@soh={0}", System.Configuration.ConfigurationSettings.AppSettings["HK"].ToString());

           Process.Start("IExplore.exe", url);
           this.Close();
       }

它在我的机器上运行良好。然后我创建了一个安装程序来安装它,但是当我在生产机器上运行我新安装的程序时,我得到了以下异常:

System.NullReferenceException: Object reference not set to an instance of an object.
   at HospitalClient_App.Home.Home_Load(Object sender, EventArgs e)
   at System.Windows.Forms.Form.OnLoad(EventArgs e)
   at System.Windows.Forms.Form.OnCreateControl()
   at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   at System.Windows.Forms.Control.CreateControl()
   at System.Windows.Forms.Control.WmShowWindow(Message& m)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
   at System.Windows.Forms.ContainerControl.WndProc(Message& m)
   at System.Windows.Forms.Form.WmShowWindow(Message& m)
   at System.Windows.Forms.Form.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

如果我换行

 Process.Start("IExplore.exe", url); 

Process.Start("IExplore.exe","http://localhost:49916/Express/Login.aspx?yek@soh=6775228");

然后程序运行。

我的app.config如下:

<configuration>
    <appSettings>
        <add key="HK" value="PRO2"/>
        <add key="ClientSettingsProvider.ServiceUri" value=""/>
    </appSettings>
    <startup>
        <supportedRuntime version="v2.0.50727"/>
    </startup>
</configuration>

我该如何解决这个问题?什么可能导致问题?

【问题讨论】:

  • 您的 app.config 的 appSettings 部分是什么样的?
  • 这是我的 app.config 文件
  • 感谢您编辑我的问题。如果您能帮助我,那就太好了。

标签: c# .net web-config desktop-application windows-applications


【解决方案1】:

我的通灵调试器唯一能看到潜在 NRE 的地方是:

ConfigurationSettings.AppSettings["HK"].ToString()

(即deprecated,使用ConfigurationManager.AppSettings[])。

它在那里抛出的事实会告诉你没有找到带有键HK的Appsetting,导致ConfigurationSettings.AppSettings["HK"]返回null,导致null.ToString()抛出上述异常。

确保&lt;add key="HK" value="..." /&gt; 位于相关配置的 appsettings 部分中。

【讨论】:

  • 你需要的不是运气,而是逻辑。你不说出了什么问题。您不知道配置是否包含正确的应用设置。
  • 这是我的 app.config 文件
  • 但是您想从网站上阅读它。不应该是web.config吗? 通过编辑你的问题更好地解释你的问题,解释什么项目安装在哪里,他们使用什么配置文件以及这些文件是如何命名的。
  • 抱歉我的问题含糊不清。 1. 密钥在 App.Config(Windows 应用程序)中 2. 我试图在 Home.cs 的 Load 事件中读取它(这是 Windows 应用程序中的启动表单)。 private void Home_Load(object sender, EventArgs e) { string url = string.Format("localhost:49916/Express/Login.aspx?yek@soh={0}", System.Configuration.ConfigurationSettings.AppSettings["HK"].ToString()); Process.Start("IExplore.exe", url);上面的代码在开发中运行良好(VS 2008)。
  • 但是当安装程序创建、安装并尝试运行时。它在读取 appsettings 键的行抛出错误。这就是问题所在。
【解决方案2】:

可能是您查看了错误的 app.config 吗?我已经这样做了 100 次。

【讨论】:

  • 配置是否与应用程序在同一文件夹中?是否正确命名? applicationname.extension.config ?当你调试时,调试器会读取 vhost 配置文件而不是 applicationname.extension.config 文件。
  • @user1540857 OP 在调试时没有问题。 Visual Studio 将根据需要将 app.config 复制到 vhost... 文件。听起来另一台机器上的安装程序没有创建正确的文件。
【解决方案3】:

在运行时,正在读取的配置文件的文件名是 NOT app.config。它是 applicationname.extension.config。

例如:如果您正在运行 application.exe,那么您的配置文件的名称将是 application.exe.confiig。该文件应与您的应用程序位于同一目录中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 2014-12-22
    • 2013-08-14
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多