winform多项目app.config使用问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了winform多项目app.config使用问题相关的知识,希望对你有一定的参考价值。

我的解决方案结构如下: main A B main中引用A、B项目现在A项目中的一些实施时可能需要修改的配置信息放在A项目的app.config中,生成A项目时在A\bin\debug下生成了A.dll.config,其中包含A项目的可配置内容。 A.dll.config内容如下:
生成整个解决方案时,main\bin\debug中仅有新生成的A.dll、B.dll,而没有A.dll.config;这就是第一个问题,生成时子项目配置文件未自动生成到main中;此时我手工把A.dll.config复制到main\bin\debug下,启动主项目main,在程序中调用A项目的界面,界面中的程序中调取 string settingString = ConfigurationManager.AppSettings[“aaa”]; 此时结果为settingString=null 问题二出现了,程序似乎得不到配置值。请各位大神帮忙解决,已经焦灼一天了~~~~~~~~~
我们老大是想把界面中的汉字部分(如按钮标签,提示信息等)都做在config中,而不是打包进DLL里,以此实现实施项目时进行个性化配置,如果想实现以上需求,还有其他方法吗?

先解释你遇到的两个问题。

问题一:链接库项目的app.config文件默认是不会复制到引用者的输出目录的。即使你在A项目中修改app.config的属性“复制到输出目录”为始终复制或者较新复制,在A项目的输出中会有预期的app.config和A.dll.config,但是在main的输出目录只会有app.config而没有A.dll.config。请手动复制。

问题二:VS自身没有智能拼接多个配置文件的功能,而且ConfigurationManager指向的是默认的应用程序配置文件而非你拷贝过去的A.dll.config,所以你这样是取不到值的。要想读取A.dll.config,请使用如下代码手动加载配置文件:
Configuration config = ConfigurationManager.OpenExeConfiguration("A.dll.config");
然后可以使用config.AppSettings["...."]读取。

关于你的预期目标,我个人的建议是如果只存本地化数据的话,不要使用配置文件,你可以选用Settings绑定,或者自写Xml都可以在外部进行更改同时又能直接作为“内容”生成到输出目录。

如果你的链接库本身就逃不开config文件,那就只好动手复制一下了。

如有疑问请追问。希望能帮到你。
参考技术A 用ini文件存储汉字

在 C# winform 中使用 app.config 访问数据库连接字符串

【中文标题】在 C# winform 中使用 app.config 访问数据库连接字符串【英文标题】:Accessing database connection string using app.config in C# winform 【发布时间】:2012-01-18 13:15:33 【问题描述】:

我似乎无法在我的 c# winforms 应用程序中访问 app.config 数据库连接字符串。

app.config 代码

   <connectionStrings>
      <add name="MyDBConnectionString" providerName="System.Data.SqlClient"
            connectionString="Data Source=localhost;Initial Catalog=MySQLServerDB; Integrated Security=true" />
   </connectionStrings>  

C#代码:

SqlConnection conn = new SqlConnection();
conn.ConnectionString = System.Configuration.ConfigurationSettings.AppSettings["MyDBConnectionString"];    

当我尝试 C# 代码时,我收到一条消息:警告 1 'System.Configuration.ConfigurationSettings.AppSettings' 已过时:' 此方法已过时,已被 System.Configuration!System.Configuration.ConfigurationManager.AppSettings' 取代

但是,当我尝试使用时:

conn.ConnectionString = System.Configuration!System.Configuration.ConfigurationManager.AppSettings["MyDBConnectionString"];  

我得到一个错误:只有赋值、调用、递增、递减和新对象表达式可以用作语句

【问题讨论】:

当我没有在代码行末尾添加() 时,通常会出现该错误...(这是旧的,但我仍然喜欢评论) 【参考方案1】:

关于这个:

我得到一个错误:只有赋值、调用、递增、递减和新对象表达式可以用作语句

我刚刚声明了一个这样的 var 并解决了问题:

var strConnection = System.Configuration.ConfigurationManager.ConnectionStrings["MyDBConnectionString"].ConnectionString;

【讨论】:

【参考方案2】:

请尝试以下代码。这是你所期望的:

SqlConnection MyConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);       

【讨论】:

【参考方案3】:

说明使用该行的答案

ConfigurationManager.ConnectionStrings["MyDBConnectionString"].ConnectionString;

是正确的。

如果出现错误提示 ConfigurationManager 不存在,那是因为您的项目没有引用 System.Configuration

要在 .NET Framework 中执行此操作,请在 Solution Explorer 中,在要使用这行代码的项目中,右键单击 References,选择 Add Reference...,然后选择左侧的Assemblies和下方的Framework。在列表中选择System.Configuration,然后点击Ok

【讨论】:

【参考方案4】:
SqlConnection conn = new SqlConnection();
conn.ConnectionString = ConfigurationManager
    .ConnectionStrings["MyDBConnectionString"].ConnectionString;
try

    conn.Open();                

catch (Exception)

    throw;                    

【讨论】:

【参考方案5】:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>

<appSettings>

<add key="ConnectionString" value="Data Source=MY-PC;Initial Catalog=DB2013;User ID=sa;Password=MYSQL123" />

</appSettings>

</configuration>
using System.Configuration;
using System.Data.SqlClient;

namespace OnlineDelete_W2013

public partial class CommodityEdit : Form

   SqlConnection MyConnection = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]);

    public CommodityEdit()
    
        InitializeComponent();

    

    private void button1_Click(object sender, EventArgs e)
    
        try
        
           MyConnection.Open();
        
        catch (Exception)
        

            throw;
        

【讨论】:

【参考方案6】:
using (SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["SQLConnection"].ToString()))

....(your code here) ...

【讨论】:

【参考方案7】:

这就是你所需要的:

System.Configuration.ConfigurationManager.ConnectionStrings["MyDBConnectionString"].ConnectionString;

【讨论】:

【参考方案8】:

试试这个

 ConfigurationManager.ConnectionStrings["MyDbConnectionString"].ConnectionString; 

【讨论】:

【参考方案9】:

您使用的是 ConnectionStrings 集合,而不是 AppSettings。

ConfigurationManager.ConnectionStrings["MyDbConnectionString"].ConnectionString;

【讨论】:

【参考方案10】:

使用ConfigurationManager 代替ConfigurationSettings。它有一个ConnectionStrings 属性,您应该将其用于connectionStrings 部分中的连接字符串:

ConfigurationManager.ConnectionStrings["MyDBConnectionString"].ConnectionString;

【讨论】:

以上是关于winform多项目app.config使用问题的主要内容,如果未能解决你的问题,请参考以下文章

怎么打开winform项目下的app.config文件(以txt格式打开)

winform 写App.config配置文件——IT轮子系列

c# WinForm 我修改App.Config保存后会自动弹出对话框,怎么让它自动选择“全部”保存

winform中怎么在app.config中配置一个节点读取本地文件夹的路径

无法在新项目中使用 app.config

Winforms - 程序无法从 app.config 中找到连接字符串