1 回答
TA贡献1856条经验 获得超17个赞
在尝试打开之前AnotherApp.exe.config,ConfigurationManager.OpenExeConfiguration检查AnotherApp.exe磁盘上是否存在。这是来源:
// ...
else {
applicationUri = Path.GetFullPath(exePath);
if (!FileUtil.FileExists(applicationUri, false))
throw ExceptionUtil.ParameterInvalid("exePath");
applicationFilename = applicationUri;
}
// Fallback if we haven't set the app config file path yet.
if (_applicationConfigUri == null) {
_applicationConfigUri = applicationUri + ConfigExtension;
}
如您所见,exePath最终被传递到FileUtils.FileExists,最终检查是否exePath代表磁盘上的文件。在你的情况,这是AnotherApp.exe,这并没有存在。该throw ExceptionUtil.ParameterInvalid("exePath");语句是您的错误的来源。
在我上面包含的源代码中,您可以看到_applicationConfigUri设置为AnotherApp.exe.config(它是绝对路径,但为了简单起见,我使用了相对路径)。当您将 设置exePath为 时AnotherApp.exe.config,代码最终会检查AnotherApp.exe.config它找到的(它认为这是 exe 本身)是否存在。在此之后,_applicationConfigUri被设置为AnotherApp.exe.config.config它不会不存在,但配置系统不在这种情况下错误输出(而不是返回一个空的配置对象)。
看来解决这个问题可能有两种选择:
包括
AnotherApp.exe
在旁边AnotherApp.exe.config
。使用
ConfigurationManager.OpenMappedExeConfiguration
,它允许您提供自己ExeConfigurationFileMap
的指示配置系统如何定位.config
文件。如果您需要这方面的帮助,请告诉我,我将提供一个示例,说明这应该如何工作。
- 1 回答
- 0 关注
- 187 浏览
添加回答
举报