尝试打开其他人的应用程序配置文件

时间:2018-07-31 11:04:47

标签: c# app-config configurationmanager

我正在使用C#和.NET Framework 4.7开发WinForm应用程序。

使用此应用程序,我正在尝试从另一个应用程序加载配置文件:

create

但是string applicationName = Environment.GetCommandLineArgs()[1]; if (!string.IsNullOrWhiteSpace(applicationName)) { if (!applicationName.EndsWith(".exe")) applicationName += ".exe"; string exePath = Path.Combine(Environment.CurrentDirectory, applicationName); try { // Get the configuration file. The file name has // this format appname.exe.config. System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(exePath); 抛出异常:

ConfigurationManager.OpenExeConfiguration(exePath)

配置文件AnotherApp.exe.config位于文件夹An error occurred while loading the configuration file: The 'exePath' parameter is not valid. Parameter name: exePath 中。我也尝试将其更改为Environment.CurrentDirectory,但遇到相同的异常。

如果在名称Path.Combine(@"D:\", applicationName);的末尾添加exe.config而不是.exe,似乎打开了一些内容:applicationName += ".exe";是{{1 }}。但是config.FilePath对象为空。它没有填充任何属性。

我在做什么错了?

我已从Microsoft documentation复制了代码。

1 个答案:

答案 0 :(得分:1)

在尝试打开AnotherApp.exe.config之前,ConfigurationManager.OpenExeConfiguration检查磁盘上是否存在AnotherApp.exe。这是source

// ...
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设置为{em>不存在的AnotherApp.exe.config.config,但是在这种情况下配置系统不会出错(而是返回空的配置对象)。

看来有两种解决方法:

  1. AnotherApp.exe旁加上AnotherApp.exe.config
  2. 使用ConfigurationManager.OpenMappedExeConfiguration,它允许您提供自己的ExeConfigurationFileMap,以指导配置系统如何找到.config文件。如果您需要帮助,请告诉我,我将提供一个示例说明如何工作。