解决方案中的WinForms.Net子应用程序如何将其app.config嵌入自身?
当应用程序中存在未处理的异常时,我将使用it步骤的变体。然后记录错误,生成屏幕截图并通知用户 在解决方案中编译时,项目将生成一个EXE,在需要时调用该EXE。在更新程序时,我使用Visual Studio 13编辑项目属性中的现有设置项。在代码中,我使用来自解决方案中的WinForms.Net子应用程序如何将其app.config嵌入自身?,winforms,app-config,configurationmanager,Winforms,App Config,Configurationmanager,当应用程序中存在未处理的异常时,我将使用it步骤的变体。然后记录错误,生成屏幕截图并通知用户 在解决方案中编译时,项目将生成一个EXE,在需要时调用该EXE。在更新程序时,我使用Visual Studio 13编辑项目属性中的现有设置项。在代码中,我使用来自ConfigurationManager的命令 string appProduct = unhandledExceptions.Properties.Settings.Default.AppProduct; 我很高兴看到它工作了,并且反映了
ConfigurationManager
的命令
string appProduct = unhandledExceptions.Properties.Settings.Default.AppProduct;
我很高兴看到它工作了,并且反映了我在IDE中所做的更改。但是,我在解决方案生成的confg文件(MyApplication.exe.config
)中找不到设置。我假设它正在返回到另一个项目文件夹,用于UnhandledExceptions.exe.config
我创建了一个安装程序并将其安装到虚拟机上。我的设置保留了下来,但我还是看不到配置文件
结果表明,这些值嵌入了可执行文件UnhandledException.exe
项目没有列出任何资源。在网上搜索并寻找一个想要这样做的问题,而且有很多问题,看起来这通常被认为是不可能的,也是不可取的。问题通常以“你不想这么做,这叫配置是有原因的”
我可能想关闭此选项,因此它在外部是可编辑的。两个项目中app.config的属性相同
到底是什么样的环境使这成为可能?这是Visual Studio 2013的新功能吗?不需要Visual Studio设置。如果您不希望用户访问配置文件,请不要将其包含在分发版中。如果已知设置名称,则始终可以添加一个
在下面的描述中,应用程序通常表示正在使用的应用程序的名称
通过观察,我发现了有关ConfigurationManager工作方式的一些有趣的事情。
对于用户设置,它将按优先级顺序查看以下位置:
- 用户的AppData区域中应用程序的user.config
- 程序文件夹中的application.exe.config
- application.exe本身
- 程序文件夹中的application.exe.config
- application.exe本身
这些观察是使用Visual Studio 2013 Update 4进行的,并在64位Windows 7 Professional中进行了测试。我怀疑它们在所有版本中都是正确的。类库项目不能有functional.config文件。仅使用EXE项目的.config文件。您的代码仍然有效,因为它只是使用默认值,如项目的Settings.Designer.cs文件中记录的那样。也就是说,用户没有理由更改产品名称:)您应该自己将类库的配置项合并到EXE项目的配置文件中。它不是自动的,也不是很实用。@HansPassant我可以在代码中更改用户值。对保存的值所做的更改,写入用户文件夹的AppData应用程序部分中的“user.config”的本地副本,就像主应用程序一样。它确实会在该文件中创建一个单独的部分,将其与主应用程序的更新值分开。