【问题标题】:c# there is no relevant app.config after releasec#发布后没有相关的app.config
【发布时间】:2013-01-22 20:50:42
【问题描述】:

有人可以告诉我如何处理 app.config 吗?当我在 app.Properties 中创建一些值时,它会自行创建。我将代码文件设置为“CopyAlways”。但是,当我在调试或发布模式下编译应用程序,手动编辑配置(使用记事本)并启动应用程序时,它的行为就像配置文件没有变化一样。我尝试更改 app.config、appname.exe.config 甚至 appname.vschost.exe.config。

对我来说更有趣的是,我可以构建一个应用程序,然后将没有任何配置文件的源文件(appname.exe 和 dll 文件)复制到任何新文件夹,然后启动一个应用程序。它连接到服务器,尽管事实上没有配置,IP 存储在哪里。

我只发现有关在运行时通过代码更改 app.config 的问题。但这不是我想要的。我有数据配置,变化不大。和 .settings 用户设置(数据网格中记录的颜色等)。

我坚持,每次应用启动时都会读取该配置。我真的必须创建自己的配置文件,该文件与 exe 位于同一文件夹中,并且每次应用启动时都会读取?

我在 msdn 上找到的唯一支持是如何创建 app.config。

【问题讨论】:

  • 这些设置是UserSettings还是ApplicationSettings?
  • 您查看过应用配置转换吗?如果 Visual Studio 没有为您的项目类型提供本机支持,我建议您查看 Slow Cheetah extension
  • 我在选项卡设置上管理它们的属性。范围设置为用户。但同样的情况是当我将它设置为应用程序时。

标签: c# configuration app-config


【解决方案1】:

您不需要复制您的 app.config 或将其设置为“CopyAlways”。

当您构建 Visual Studio 时,它会自动将其重命名为 applicationName.exe.config

所以如果您的应用程序是:MyApplication.exe,您应该在 bin 中找到文件 MyApplication.exe.config

您将 app.config 与存储在 UserProfile 目录中的文件 user.config 中的应用程序设置混淆了。

Application Settings Overview

Application Settings Architecture

它们旨在用于将用户偏好存储为背景颜色、可视化偏好等

如果您希望配置值易于更改,则应使用 app.config 中的 appSettings 节点

    <appSettings>
    <add key="ServerIp" value="0.0.0.0"/>
</appSettings>

并从您的代码中访问它:

ConfigurationManager.AppSettings["ServerIp"]

ConfigurationManager.AppSettings

【讨论】:

  • 我发现了。但我要做的就是构建发布并将这个应用程序复制到几台计算机上,每台计算机都会有一些特殊的设置。如果有时服务器地址发生变化,我想去应用程序文件夹,找到配置,在记事本中打开它,编辑 IP 并保存。当应用程序在此更新后启动时,它将连接到另一台服务器。我可以更改所有可能的配置,但似乎应用程序独立于任何配置文件。似乎该应用程序制作了自己的配置文件,对我来说是不可见的。
  • @MartinPotvrzenejBrabec 您是否尝试使用 ConfigurationManager.AppSettings?
  • 所以我必须自己构建app.config?我想使用 Visual Studio 的图形界面。顺便说一句,我不知道为什么,但应用程序也不会对此图形界面所做的更改做出反应。
  • 已解决。在编译时,应用程序会制作自己的配置副本,并将设置值保存在 exe 本身的某个位置。然后,当我只复制 mysql 的 exe 和 dll 文件时,应用程序运行并且因为没有配置,所以使用默认值(在应用程序和用户范围内)。如果有配置,应用程序使用此 app.config 值作为应用程序范围,使用 LocalUserAppDataPath 中的 user.config 作为用户范围。
【解决方案2】:

UserScope 中的应用程序设置存储在Application.LocalUserAppDataPath 下(通常这是C:\Documents and Settings\username\Local Settings\Application Data\ 作为基本路径+ 以下架构\CompanyName\ProductName\ProductVersion)。因此,当您运行应用程序时,user.config 将存储在此文件夹中,并用于进一步启动您的应用程序。

如果在上面的路径中没有找到 user.config,则应用程序的 app.config 仅包含默认值。

打开您的资源管理器并检查 Application.LocalUserAppDataPath 的路径,如果有您的应用程序的 .config 文件。如果是这样,请将其删除或更改此文件中的设置。

【讨论】:

  • 那么,如果我将范围设置为应用程序,它应该从 app.config 中获取信息,不是吗?但即使我设置了应用程序范围,我仍然可以进行新构建,将 exe 和 dll 文件复制到新位置,然后启动并连接到服务器。但服务器 IP 总是从 app.config (appname.Properties.Settings.Default.mysqlServer) 中检索。
【解决方案3】:

您不应将 App.config 的属性更改为“始终复制”。

当您构建应用程序时,编译器会在您的输出目录中创建一个 YourAppName.exe.config 文件,其中包含与您的 App.config 文件完全相同的值.

如果您稍后更改 YourAppName.exe.config 中的值,这将在您启动应用时可见,无需重新构建。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 2016-08-10
    • 2013-09-23
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    • 2012-08-28
    相关资源
    最近更新 更多