我正在使用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复制了代码。
答案 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
,但是在这种情况下配置系统不会出错(而是返回空的配置对象)。>
看来有两种解决方法:
AnotherApp.exe
旁加上AnotherApp.exe.config
。ConfigurationManager.OpenMappedExeConfiguration
,它允许您提供自己的ExeConfigurationFileMap
,以指导配置系统如何找到.config
文件。如果您需要帮助,请告诉我,我将提供一个示例说明如何工作。