gpt4 book ai didi

c# - 解决方案的单个配置文件

转载 作者:太空狗 更新时间:2023-10-29 17:53:39 26 4
gpt4 key购买 nike

现在我以前在 SO 上以不同的方式看到过这个问题,但令人惊讶的是不是这种形式:

我有一个包含多个需要相互通信的 Web 服务(项目)的解决方案。在发布这些 Web 服务中的每一个之后,最终可能会在具有不同数据库的不同机器上结束。为了告诉每个 Web 服务所有其他 Web 服务在哪里,我想在开发期间维护一个配置文件。

我希望在发布配置后出现在每个已发布的项目中。而且我希望配置文件在发布后是可编辑的,这样我就可以快速迁移某个 Web 服务,然后只需编辑其他 Web 服务的所有配置文件。

我不想在数据库中这样做,因为配置文件本身也应该保存与数据库的连接设置。

我遇到了以下想法/想法/问题:

  • 我有一个名为“common”的 dll 项目被其他项目引用。让我们给它一个 shared.config 并在该项目中构建一个类,该类可用于通过执行 System.Configuration.ConfigurationManager.OpenExeConfiguration("shared.config") 来读出 shared.config。 .只需确保 shared.config 将与 DLL 一起发布。

我会赞成这个解决方案,因为它还可以让我在每个项目中保留一个 web.config,只有项目特定的设置。并让 shared.config 具有共享设置。但是我读到 SO 不应该轻率地考虑这一点,并且可能会产生一些不需要的副作用,例如文件访问问题;尽管我想知道这是否适用于我的情况。另外,我想在这里寻求您的帮助,了解如何实际实现这一点,因为我认为 Visual Studio 不支持开箱即用的 DLL 项目的 app.config。

  • 我还考虑过在解决方案项中创建一个 shared.config 文件。然后在每个项目中链接该文件。并在每个项目的 Web.config 中添加:<appSettings configSource="shared.config" />指向该项目中的链接文件。

虽然我找不到任何不这样做的理由,但第一次实现失败了。似乎(至少在开发过程中),c# 找不到链接的 shared.config 文件。我猜链接文件不会在创建链接文件后立即完成或维护,但文件只会在我发布时复制到项目中。因此在开发过程中丢失了文件。这是正确的吗?

最佳答案

配置文件是特定于应用程序的。这意味着您可以将配置文件添加到类库,但该文件随后将由引用该库的应用程序(Windows 服务、Web 服务等)使用。

对于外部 configSource 也是一样,这也是特定于应用程序的,需要包含在使用它的项目中。因此,如果您的解决方案由 2 个项目组成,那么您需要 2 个配置文件。每个项目一个。

虽然对于基于 windows 的应用程序(服务、winforms),配置文件的预期文件夹是 bin 目录,但对于基于 web 的项目,这将是虚拟目录的根文件夹。

这就是说,使用共享配置文件看起来是更简单的解决方案(而且您不必为每个项目从类库中复制 app.config)。以下是步骤:

  • 创建解决方案文件夹。
  • 向其中添加配置文件。
  • 添加该文件作为每个需要它的项目的引用。右键单击该项目并添加现有项目 -> 选择文件并添加为链接
  • 通过将复制选项(文件的属性)设置为始终复制,确保始终复制文件。

此时,您应该在每次编译解决方案时将配置文件部署到您的项目目录中。

编辑:

  • 我会避免在 web 应用程序中查看配置文件的 bin,约定是文件应该在根目录中,所以我会避免第一个选项。
  • 链接的文件在构建项目后最终进入垃圾箱。尝试导入文件的相同步骤,但这次只需添加它(不是链接),它将作为内容部署在您网站的根目录中,因此它可以始终可用。

关于c# - 解决方案的单个配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15495935/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com