2014-11-01 67 views
3

我有一个.NET Windows窗体应用程序来显示图像,它访问ConfigurationManager.AppSettings以获取一些设置。ConfigurationManager.AppSettings - 打开时返回null

它在调试时工作正常,而且当我直接单击我编译的exe文件时,我可以从app.config文件中获得我的设置。

问题出在我的应用程序不是由我直接执行的时候。当我将文件扩展名与它关联时,或者手动执行“打开方式”我获得空值,访问ConfigurationManager.AppSettings

任何想法?

谢谢你这么多

****当我用下面的代码编辑*****

我发现了问题发生的情况:基本上

http://mel-green.com/2009/04/c-set-file-type-association/

哪做文件关联。我不明白什么是根本原因,但在Explorer上手动执行文件关联不会发生问题。

感谢

+0

有没有明显的方法,这应该失败,Windows仍然运行您的.exe以同样的方式调试程序。但是,再次,不使用'Properties.Settings'来检索应用程序设置是非常*不常见的。意味着让你应该像这样的麻烦。你做错了什么,我们看不到你做错了。 – 2014-11-01 12:44:16

+0

您可以检查应用程序目录中配置文件的名称吗?配置名称应该是exename.exe.config,应用程序名称应该是exename.exe。 – 2014-11-03 07:42:50

+0

嗨@ChaturvediDewashish我更新了我的问题,谢谢你的帮助。 – 2014-11-04 10:07:27

回答

0

我想这和它的工作

App.Config中

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 

    <appSettings> 
    <add key="ExtensionSupported" value ="jpeg,jpg"/> 
    </appSettings> 
    <startup> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
</configuration> 

Program.cs的

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    static class Program 
    { 
     /// <summary> 
     /// The main entry point for the application. 
     /// </summary> 
     [STAThread] 
     static void Main(string[] args) 
     { 

      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      if(args.Length>0) 
       Application.Run(new Form1(args[0])); 
      else 
      Application.Run(new Form1()); 
     } 
    } 
} 

Form1.cs的

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Configuration; 
using System.Data; 
using System.Drawing; 
using System.IO; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     private string p; 

     public Form1() 
     { 
      InitializeComponent(); 



     } 

     public Form1(string filePath):this() 
     { 
      MessageBox.Show("Loading file "+ filePath); 
      CheckForAllowed(filePath); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      openFileDialog1.Multiselect = false; 
      DialogResult dr= openFileDialog1.ShowDialog(); 

      if (dr == System.Windows.Forms.DialogResult.OK) 
       CheckForAllowed(openFileDialog1.FileName); 

     } 

     private void CheckForAllowed(string filePath) 
     { 
      string appSetting = ConfigurationManager.AppSettings["ExtensionSupported"]; 
      MessageBox.Show("Allowed file types are " + appSetting); 
      string[] allowedFileTypes = appSetting.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); 

      string fileExtesnsion = filePath.Substring(filePath.LastIndexOf('.')+1).Trim(); 



      if (allowedFileTypes.Contains(fileExtesnsion)) 
       label1.Text = "Allowed"; 
      else 
       label1.Text = "Not allowed"; 
     } 

    } 
}