【问题标题】:Are strings in web.config compiled into the executable?web.config 中的字符串是否编译为可执行文件?
【发布时间】:2021-09-29 14:18:07
【问题描述】:

我工作的存储管理员购买并配置了一个新的大型 NAS 系统。 随着时间的推移,所有当前存储将迁移到那里。这意味着各种网络路径将发生变化,这将破坏一些内部应用程序。我们正在审查一堆旧应用程序,以找到使用当前路径的应用程序,例如:\\old-file-system.company.com\Users,以便我们修改它们。

我发现的旧应用程序都将这些路径设置为项目web.config 文件中的字符串。我的问题是:这些路径是编译成可执行文件还是在运行时从这个配置文件中读取?我们可以只修改配置文件中的路径,而不必重新构建它们或将它们升级到更新的 .Net 版本吗?

干杯

【问题讨论】:

  • 这是一个 XML 文件,没有编译,它是按需读取的。您可以更改配置文件中的路径,除非发生您没有考虑到的硬编码,否则您应该会很好。

标签: c# asp.net .net


【解决方案1】:

从配置文件中读取值。

这正是配置文件的重点:提供更改这些值而无需重新部署应用程序的能力。

请注意,这可能需要您在进行更改后重新启动 IIS 上的应用程序池。通常,它应该在检测到对配置文件的更改时自动执行此操作,但根据历史经验,这有时会在您没有注意到的情况下中断。

顺便说一句:不要忘记替代配置存储方法,例如数据库。

【讨论】:

  • 见下面我的回答。如果所有代码都使用配置管理器来获取值,那么你就可以了。如果您使用内置的设置类,那么不行,您必须在更改后重新构建
【解决方案2】:

是的,他们是!

然后它将取决于代码。

所以,作为一般规则没有。

但是,如果您添加了新的配置项,那么它们很可能不会显示出来。

如果代码使用内置类代替常用的配置管理器来获取值?

那么你必须重新编译。

但是,我们也可以使用这个:

vb.net:

   Dim rstData As New DataTable
    Using cmdSQL As New SqlCommand(strSQL, New SqlConnection(My.Settings.TEST3))
        cmdSQL.Connection.Open()
        rstData.Load(cmdSQL.ExecuteReader)
    End Using

所以,我经常使用 My.Settings.TEST3 代替配置管理器。

(你会得到情报)。因此,在构建时,会为其中一些 Web 配置文件创建一个类。)

在c#中,上面是:

Properties.Settings.Default.TEST3

并且由于 intel-sense 代替配置管理器而经常使用。

该类在编译时重新构建。因此,如果用于获取 web.config 值的代码始终是配置管理器,那么您应该/应该没问题。

但是,如果代码使用了上面的内置类呢?

这些值是在编译(构建)时从 web.config 中提取的。

类被调用

c# Settings.Desinger.Cs

vb.net

Settings.Desinger.vb

所以,我会检查上述两个文件。该类往往来自这里:

现在当我们向项目中添加一个连接字符串时,上面呢?

上述确实更新并将上述设置放入 web.config。

但是,创建的类 (settings.Desing.cs/vb?

每次都会重新生成,并且会从 web.config 复制值。

因此这意味着在更改该项目中的设置后,您确实必须重新构建。

如前所述,如果一个来自桌面领域,那么我们只需在上面添加设置并使用它们。它们实际上是在 web 配置中创建的,但我们经常使用上面的 - 因为如前所述,我们添加到项目中的任何新设置现在都具有 intel-sense。

所以,我会搜索源代码:

vb:

My.Settings.TEST3

(search for My.Settings.)

或 c#

Properties.Settings.Default.TEST3
(search for Properties.Settings.)

如果在代码中使用了以上任何一个? 那么是的,你必须重新构建,因为它们是在编译时重新创建到一个类中的,并且值是在编译时从 web.config 中提取的。

如果在所有情况下都使用了配置管理器,那么你就可以了。

但是,如果使用了设计器类,则需要重新构建,更糟糕的是,在重新构建之前,web.config 中的更改不会反映在该类中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-09
    • 2018-10-13
    • 2021-02-02
    • 2015-09-11
    • 2010-11-03
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    相关资源
    最近更新 更多