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保存后会自动弹出对话框,怎么让它自动选择“全部”保存