ASP.NET - 如何确保使用 web.config 而非 app.config 来设置连接字符串?

3

我有一个MVC网站,在将其移动到测试环境后,发现它出现了故障。经过一番调查,我发现是因为我将'model'拆分到了另一个单独的项目中,并且该模型正在使用它自己的app.config中的连接字符串(而不是网站的web.config)。

所以我找到了一篇文章(现在找不到链接了),展示了如何使用web.config代替app.config - 非常好,我将网站移到了测试环境。

不幸的是,下一次我再次尝试在测试环境中实施网站时,我遇到了相同的问题,并且在一段时间之后发现,我的模型的app.config不知何故重新编写了连接字符串,太愚蠢了!

这里最好的做法是什么?我需要将数据库配置放在一个易于被系统管理员更改的文件中。


我认为它是从你的模型项目中的设置文件获取的。我也有同样的问题。 - Jack Marchetti
3个回答

2
据我所知,ASP.NET 应用程序永远不会使用 app.config。

问题在于类库(我的数据访问层)使用的是 app.config 而不是 web.config。 - Grayson Mitchell
不,它并没有。你为什么这么认为呢?在.NET中,每个AppDomain永远不会有多个配置文件,除非配置文件的一部分被重定向到另一个文件。你是否在库中使用了设置(Settings)?如果是这样,请尝试从app.config更改一个值,并查看在从ASP.NET运行时是否有所影响。 - John Saunders

1
如果您的项目同时拥有 App.config 和 Web.config 文件,那么您希望将它们绑在一起,以共享连接字符串。这样做很容易。在 *.config 文件中添加以下行:
<connectionStrings configSource="WebCS.config" />

webcs.config 的外观如下:

<connectionStrings>
 <add name="YourConnString" connectionString="Data Source=Server;Initial Catalog=YourDB;User ID=SQLID;Password=Password" providerName="System.Data.SqlClient"/>
</connectionStrings>

这将允许您从多个位置引用相同的连接字符串,并轻松地拥有在开发、测试和部署服务器上不同的连接字符串。

更新:如果您正在进行TDD或以其他方式将逻辑分离到单独的DLL中,则可能会同时拥有两种类型的.Config文件,从而引发您提出的问题。当然,在ASP.NET中创建基于表单的Web应用程序时,单独的业务逻辑DLL是一种“最佳实践”。例如,我仅在网站本身中放置UI代码,然后调用DLL处理所有与业务相关和数据处理逻辑。这不仅有助于关注点分离,而且还使测试变得容易。


不客气。感谢您选择这个答案作为“答案”。 - Mark Brittingham


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接