C# 从app.config获取连接字符串
我有一个Web项目,它调用一个库项目(DataAccess)从数据库中检索一些数据。我向DataAccess项目添加了一个App.config文件(Add->New Item->Application Configuration file),并添加了一个connectionString部分,如下所示:C# 从app.config获取连接字符串,c#,connection-string,app-config,C#,Connection String,App Config,我有一个Web项目,它调用一个库项目(DataAccess)从数据库中检索一些数据。我向DataAccess项目添加了一个App.config文件(Add->New Item->Application Configuration file),并添加了一个connectionString部分,如下所示: <configuration> <connectionStrings> <add name="local" connectionStrin
<configuration>
<connectionStrings>
<add name="local"
connectionString="Data Source=.\sql2008;Initial Catalog=myDB;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
当我从Web项目调用该方法时,它抛出一个null异常,抱怨“本地”连接字符串不存在。调试了一段时间后,我将相同的连接字符串添加到Web项目的Web.config中,现在可以正常工作了。但问题是,我想将DataAccess项目与Web项目隔离开来,换句话说,我希望DataAccess项目使用自己的app.config文件,不管谁调用它。这可能吗?任何帮助都将不胜感激。在运行时,只有一个配置文件。因此,活动项目的配置文件仅为 考虑过的。此外,不能将类库项目作为活动/启动项目,即 假设您的解决方案中有4个项目,每个项目都有一个配置文件,那么当您运行应用程序时,只会识别活动项目(即启动项目)的配置文件 现在你能做什么
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings file="YourSettings.config">
<add key="KeyToOverride" value="Original" />
<add key="KeyToNotOverride" value="Standard" />
</appSettings>
<system.web>
<!-- standard web settings go here -->
</system.web>
<appSettings>
<add key="KeyToOverride" value="Overridden" />
<add key="KeyToBeAdded" value="EntirelyNew" />
</appSettings>
在应用程序中使用时,将使用app.config。对于使用应用程序配置文件的库项目没有帮助。即使您把它放在参考库中,代码也会放在web服务器中。 因此,这种类型的隔离对任何安全问题都没有意义 但是把事情放在正确的地方的方法是正确的,问题是当你引用一个dll时,它不包括dll项目的配置 如果您想要更多:)只需阅读lib项目中的app.config,并使用代码生成器创建一个连接字符串对象,如publicstaticstringconnectionstring=$GeneratedCode$ 是的,这是可能的 您的app.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="foo" value="bar"/>
</appSettings>
</configuration>
以下是如何使用它:
namespace MyApp.WebApp
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
var db = new MyApp.DataAccess.DB();
Response.Write(db.cfg);
}
}
}
编译数据访问项目时,它将从
app.config
内容中生成一个MyApp.DataAccess.dll.config
。将MyApp.DataAccess.dll.config
和MyApp.DataAccess.dll
添加到您的web应用程序项目中,并确保为MyApp.DataAccess.dll.config
标记Copy to Output Directory
以复制较新的,当您从web应用访问数据访问权限时,您可以拥有从其自己的配置文件读取连接字符串的数据访问权限。这是可能的。您需要ConfigurationManager.OpenExeConfiguration
。
namespace MyApp.DataAccess
{
public class DB
{
public string cfg;
public DB()
{
var asmName = System.Reflection.Assembly.GetAssembly(this.GetType()).GetName().Name;
var asmPath = System.Web.HttpContext.Current.Server.MapPath(@"bin\" + asmName + ".dll");
var cm = ConfigurationManager.OpenExeConfiguration(asmPath);
this.cfg = cm.AppSettings.Settings["foo"].Value;
}
}
}
namespace MyApp.WebApp
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
var db = new MyApp.DataAccess.DB();
Response.Write(db.cfg);
}
}
}