【问题标题】:How does a WinForms .Net sub-application in a solution embed its app.config into itself?解决方案中的 WinForms .Net 子应用程序如何将其 app.config 嵌入到自身中?
【发布时间】:2015-03-20 10:40:20
【问题描述】:

我正在使用Jeff Atwood’s Unhandled Exception handler 的变体,当应用程序中存在未处理的异常时它会介入。然后它会记录错误、生成屏幕截图并通知用户。

在解决方案中编译时,项目会生成一个 EXE,在需要时调用。在更新程序时,我使用 Visual Studio 13 来编辑项目属性中的现有设置项。在代码中,我使用来自ConfigurationManager 的命令。

string appProduct = unhandledExceptions.Properties.Settings.Default.AppProduct;

我很高兴看到它有效并反映了我在 IDE 中所做的更改。但是我在解决方案生成的 confg 文件 (MyApplication.exe.config) 中找不到设置。我认为它正在返回到 UnhandledExceptions.exe.config 的另一个项目文件夹。

我创建了一个安装程序并将其安装到虚拟机上。我的设置被保留了,但我还是看不到 config 文件。

事实证明这些值嵌入在可执行文件UnhandledException.exe中。

该项目没有列出任何资源。搜索网络和 StackOverflow 寻找想要这样做的问题,并且有很多问题,似乎这通常被认为是不可能的,也是不可取的。问题通常以“你不想这样做,它被称为配置是有原因的”结尾。

我可能想关闭它,所以它可以在外部进行编辑。两个项目中 app.config 的属性是相同的。

究竟是什么设置使这成为可能?它是 Visual Studio 2013 的新功能吗?

【问题讨论】:

  • 类库项目不能有功能性的 .config 文件。只使用过 EXE 项目的 .config 文件。您的代码仍然有效,因为它只是使用项目的 Settings.Designer.cs 文件中记录的默认值。没关系,用户没有充分的理由更改产品名称:) 你应该做的是自己将类库的配置条目合并到 EXE 项目的配置文件中。它不是自动的,也不是很实用。
  • @HansPassant 我可以在代码中更改用户值。对保存的这些值的更改,就像主应用程序一样,写入用户文件夹的 AppData 应用程序部分中的“user.config”的本地副本。它确实在该文件中创建了一个单独的部分,使其与主应用程序的更新值分开。

标签: winforms app-config configurationmanager


【解决方案1】:

不需要 Visual Studio 设置。如果您不希望用户访问配置文件,请不要将其包含在分发中。如果设置名称已知,则始终可以添加。

在下面的描述中,应用程序一般表示正在使用的应用程序的名称。

我通过观察发现了一些关于 ConfigurationManager 工作方式的有趣之处。 对于 User 设置,它将按优先级顺序查看以下位置:

  • user.config 用于用户 AppData 区域中的应用程序

  • application.exe.config在程序文件夹中

  • application.exe 本身

单独搜索每个设置。如果您的应用程序请求的设置在 user.config 或 application.exe.config 中均未找到,它将从可执行文件中获取。

对于 Application 设置,它会按优先级顺序在以下位置查找:

  • application.exe.config在程序文件夹中

  • application.exe 本身。

应用程序设置没有与 user.config 等效的功能。

Visual Studio IDE 中打开 application.exe 不会显示配置信息的资源。

application.exe.config 很方便,因为它可以在外部进行修改并用作新安装的默认值。一旦 user.config 中的设置被覆盖,application.exe.config 中的值将被忽略。

.Net 1.0 中的旧配置方法 AppSettings 部分并非如此。如果我删除配置文件,它的可执行文件中就没有它们。

这些观察是使用 Visual Studio 2013 Update 4 进行的,并在 Windows 7 Professional 64 位中进行了测试。我怀疑它们在所有版本中都是正确的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    • 2022-01-12
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    相关资源
    最近更新 更多