我在C#.NET中做了一个项目,我的数据库文件是一个Excel工作簿。由于连接字符串的位置在我的编码中是硬编码的,所以在我的系统中安装它没有问题,但对于其他系统就有问题。
有没有办法在应用程序的设置完成后提示用户设置一次路径?
我得到的答案是"使用App.Config"......谁能告诉我这个App.config是什么,如何在我这里使用它?
最简单的是,app.config是一个XML文件,有许多预定义的配置部分可用,并支持自定义配置部分。一个"配置部分"是一个带有模式的XML片段,用于存储某种类型的信息。
设置可以通过内置的配置部分进行配置,如connectionStrings
或appSettings
。你可以添加你自己的自定义配置部分;这是一个高级话题,但对于建立强类型的配置文件来说非常强大。
Web应用程序通常有一个web.config,而Windows GUI/服务应用程序有一个app.config文件。
应用程序级的配置文件继承了全局配置文件的设置,例如machine.config。
连接字符串有一个预定义的模式,你可以使用。注意,这个小片段实际上是一个有效的app.config(或web.config)文件。
<?xml version="1.0"?>
<configuration>
<connectionStrings>
<add name="MyKey"
connectionString="Data Source=localhost;Initial Catalog=ABC;"
providerName="System.Data.SqlClient"/>
</connectionStrings>
</configuration>
一旦你定义了你的app.config,你就可以使用ConfigurationManager类在代码中读取它。不要被MSDN的冗长例子所吓倒,这其实很简单。
string connectionString = ConfigurationManager.ConnectionStrings["MyKey"].ConnectionString;
经常改变*.config文件通常不是个好主意,但听起来你只想进行一次性的设置。
参见:https://stackoverflow.com/q/502411/453277,其中描述了如何在运行时更新*.connectionStrings`部分。
请注意,在理想情况下,你应该从一个简单的安装程序中进行这样的配置修改。
*Q:假设我手动改变了app.config中的一些<值>
,保存它,然后关闭它。现在当我去bin文件夹并从这里启动.exe文件时,为什么它不反映所应用的变化?
A:当你编译一个应用程序时,它的app.config会被复制到bin目录1,其名称与你的exe相匹配。例如,如果你的exe被命名为"test.exe",在你的bin目录中应该有一个"text.exe.config" 。你可以在不重新编译的情况下改变配置,但你将需要编辑在编译时创建的配置文件,而不是原来的app.config。
1:注意web.config文件不会被移动,而是在编译和部署时保持在同一位置。这方面的一个例外是,当web.config被转化.
.NET Core引入了新的配置选项。*.config文件的工作方式似乎没有改变,但开发者可以自由选择新的、更灵活的配置范式。
App.Config是一个XML文件,被用作你的应用程序的配置文件。换句话说,你把你可能想要改变的任何设置都储存在里面,而不必改变代码(和重新编译)。它经常被用来存储连接字符串。
参见这篇MSDN文章,了解如何做到这一点。