C# ConfigurationManager.AppSettings-使用打开时返回null
我有一个.NET Windows窗体应用程序来显示图像,它可以访问C# ConfigurationManager.AppSettings-使用打开时返回null,c#,.net,winforms,C#,.net,Winforms,我有一个.NET Windows窗体应用程序来显示图像,它可以访问ConfigurationManager.AppSettings来获取一些设置 它在调试时运行良好,而且当我直接单击编译的exe时,我可以从app.config文件中获取设置 当我的应用程序不是由我直接执行时,问题就出现了。当我将文件扩展名与之关联,或手动执行“打开方式”时,访问ConfigurationManager.AppSettings时,我会得到null 有什么想法吗 多谢各位 ****编辑***** 当我使用以下代码时,
ConfigurationManager.AppSettings
来获取一些设置
它在调试时运行良好,而且当我直接单击编译的exe时,我可以从app.config
文件中获取设置
当我的应用程序不是由我直接执行时,问题就出现了。当我将文件扩展名与之关联,或手动执行“打开方式”时,访问ConfigurationManager.AppSettings
时,我会得到null
有什么想法吗
多谢各位
****编辑*****
当我使用以下代码时,我发现问题发生了:
这基本上就是文件关联。我不知道根本原因是什么,但在explorer上手动执行文件关联不会发生问题
谢谢我试过了,而且很有效 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>
没有明显的失败方式,Windows仍然以与调试器相同的方式运行.exe。但同样,不使用
Properties.Settings
检索应用程序设置是非常不寻常的。为了让你免于这样的麻烦。你做错了,我们看不出你做错了。你能检查一下应用程序目录中配置文件的名称吗?配置名应该是exename.exe.config,应用程序名应该是exename.exe.Hi@ChaturvediDewashish我更新了我的问题,谢谢你的帮助。
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());
}
}
}
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";
}
}
}