3

我加入了一个项目,其中 .NET Windows 窗体应用程序使用设置机制项目>属性>设置)来保留用户设置和应用程序设置。我创建了LoadAssembly(<main application EXE file>)用于执行主应用程序的某些功能的命令行工具。在调用主应用程序的方法时,一切正常,除了设置时——当然,因为它们没有加载——设置加载器被跳过。

但是该应用程序严重依赖设置,因此我需要显式调用该设置加载器。但我找不到它:我已经分析了添加了设置的空白 .NET 项目的所有文件,并且找不到加载例程。

我认为在最坏的情况下我可以解决问题并实施

  • 定位设置文件
  • 显式加载其内容

但我不喜欢重新发明轮子,特别是我不喜欢在 .NET 平台上加载设置的不透明处理。
有没有办法调用 .NET 框架使用的内置代码My.Settings在应用程序启动时加载?

注意:应用程序是用 VB.NET 编写的,但我认为 C# 也是如此,所以如果你愿意,请不要犹豫,提出 C# 的思维方式。

4

2 回答 2

0

我最近发现,处理设置的默认方式不允许也不支持我的方案。评估

ConfigurationManager.OpenExeConfiguration( ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath

从原始应用程序调用和从加载的程序集调用时提供不同的本地设置目录。比较相同方法的输出:

直接调用时:

C:\Users\Miroxlav\AppData\Local\WindowsApplication1\WindowsApplicationSetting_Url_za1afclumj0mqqjsghdpysdumjr5jd21\1.0.0.0\user.config

当作为从另一个应用程序调用的加载程序集的一部分调用时:

C:\Users\Miroxlav\AppData\Local\WindowsApplication1\TestWindowsApplicationSet_Url_cxikfslvgbja50yw4lvnvugko41ou5jz\1.0.0.0\user.config

因此,使用默认设置提供程序甚至无法直接确定配置文件的位置。 这基本上使直接检索加载程序集的 My.Settings 的所有潜在后续步骤无效(没有帮助文件,使用固定设置的其他解决方法等 - 同时保持默认设置提供程序)

出路可以是编写自定义设置提供程序,将设置存储在普遍可访问的位置,尽管它的开销比我预期的要大得多。

更新:作为一种快速解决方法,我实现了帮助文件以在主应用程序启动时保存配置位置。当主应用程序的代码作为加载的程序集启动时,我正在从保存在帮助文件中的位置找到的配置文件中恢复My.Settings 。

于 2014-05-03T12:59:44.087 回答
-1

System.Configuration.Configuration 配置 = ConfigurationManager.OpenExeConfiguration (ConfigurationUserLevel.None);

于 2014-05-02T11:45:16.957 回答