在.dll中使用web.config和app.config

4
我刚继承了一个非常老的ASP.NET 2.0 Web应用程序。
在应用程序中,有几个支持类库项目。在DataAccess类库中,有一个名为ConnString1的连接字符串的app.config(和setting.settings文件)。
我一直认为.DLL不能有app.config / setting.settings文件(或者至少可以包含它们,但不会被使用),所以这让我感到困惑。
web.config也有一个名为ConnString1的连接字符串,具有相同的服务器登录凭据,但是服务器名称不同。
当我从Visual Studio DEBUG运行应用程序时,它使用位于app.config / settings文件中的连接字符串,而不是在web.config / machine.config中定义的连接字符串。
我以为.DLL不会这样做,而是使用web.config呢?
然而,当我将此应用程序以RELEASE模式推送到我们的生产服务器(在测试网站中)时,它似乎正在使用web.config中的正确连接字符串。
有人能解释一下吗?
4个回答

3

你肯定有什么让你认为该DLL文件的配置文件正在被使用,而不是应用程序(入口点)的配置文件(yourapp.exe.config或web.config)。也许该连接字符串在某处被硬编码以在调试模式下使用,例如通过“#if DEBUG”预处理指令进行条件编译(因此,可以通过在解决方案中搜索“#if DEBUG”来查看是否发生了这种特定情况)。

MSDN文章关于应用程序设置的内容

请参阅“在设计时创建应用程序设置”部分中的黄色“注意”:“由于没有类库的配置文件模型,应用程序设置不适用于类库项目。”


2
我发现了问题:
在上面的例子中,我使用web.config/machine.config来设置应用程序的连接字符串。
如果连接字符串没有在web.config中定义,则默认使用machine.config。如果连接字符串没有在machine.config中定义,则会使用在.dll中找到的app.config设置。
需要注意的是,将连接字符串放置在machine.config中时,必须在正确的Framework/CONFIG中定义它。
在我的开发机器上,连接字符串并没有在web.config中定义,而是在environment.config中定义,但是在Framework64/CONFIG中,然而,应用程序是以32位编译的,因此使用没有定义连接字符串的Framework/CONFIG,导致它默认使用类库中的app.config。
希望这能解释清楚?

1
很高兴你找到了它。你接下来应该做的是与各方相关人员开会,并向他们解释连接字符串不应该放在机器或环境配置文件中。 - NotMe
1
我不认为这是正确的。将连接字符串放在 machine.config 中意味着您可以将应用程序(及其配置文件)从开发->测试->生产中升级,而无需在每个步骤中手动修改配置。 - Jason
正确。我们处于一个拥有20个不同网站的环境中。由于列级加密(只允许一个登录来加密/解密数据库级别的列),它们都使用相同的连接字符串。将此连接字符串放在machine.config中比每季度在web.config中更改它更容易(这是我们安全标准所要求的)。 - Sean
回应Jason,另一种处理部署时web.config手动编辑的方法(我在另一家公司几年前遇到过)是将web.config模块化。向配置部分添加file=""属性,这样您就可以将特定于环境的定义放在本地文件中,并将其排除在构建包之外。您可以进行xcopy部署并保留本地文件。除非您有20个应用程序都需要完全相同的设置,否则我会避免将设置存储在machine.config中。 - user1664043

1
所有配置设置都必须在可执行配置文件中指定。对于 Windows 和控制台应用程序,它是 app.config;对于 Web 项目,则为 web.config。
库可以指定配置设置,但您必须将这些设置复制到可执行文件的配置文件中,以便应用程序能够读取它们。

0

Web.config、AppSettings.json 和 App.config 的区别

Web.config:

当您想在IIS上托管应用程序时,需要使用Web.config文件。 Web.config是IIS的强制配置文件,用于配置其在Kestrel前作为反向代理时的行为方式。如果要在IIS上托管应用程序,则必须维护一个web.config文件。

AppSetting.json:

对于与IIS无关的其他所有内容,您可以使用AppSetting.json。 AppSetting.json用于Asp.Net Core托管。ASP.NET Core使用“ASPNETCORE_ENVIRONMENT”环境变量来确定当前环境。默认情况下,如果您在没有设置此值的情况下运行应用程序,则会自动将其默认为生产环境并使用“AppSetting.production.json”文件。当您通过Visual Studio进行调试时,它将环境设置为开发环境,因此它将使用“AppSetting.json”。请参阅此网站以了解如何在Windows上设置托管环境变量。

App.config:

App.config是.NET使用的另一种配置文件,主要用于Windows表单、Windows服务、控制台应用和WPF应用程序。当通过控制台应用程序启动您的Asp.Net Core托管时,也会使用app.config。


摘要

选择配置文件取决于您为服务选择的托管环境。如果您使用IIS来托管您的服务,请使用Web.config文件。如果您使用其他任何托管环境,请使用App.config文件。 请参阅使用配置文件配置服务文档,还可以查看ASP.NET Core中的配置。


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