【问题标题】:.config file not loaded from working directory.config 文件未从工作目录加载
【发布时间】:2010-04-06 15:12:54
【问题描述】:

我是使用 .config 文件的新手,直到最近才使用使用 .INI 文件和注册表的应用程序。我在 VS2008 中看到了一种我没有预料到的行为,我想知道它是否是预期的。

当我在 VS2008 IDE 中为我的 Foo.exe 应用程序配置工作目录设置时,我猜想 Foo.exe.config 会从中加载工作目录。它不是;它是从 ..\bin\Debug 目录加载的,即使我在该工作目录中有一个 Foo.exe.config 文件。如果我在通过设置断点应用配置时检查 Environment.CurrentDirectory,我会看到它是 ..\bin\Debug。当我在主 UI 的 Loaded 事件之后检查 Environment.CurrentDirectory 时,它被设置为我在 IDE 中应用的工作目录。

这是正确的吗? (为什么?)

【问题讨论】:

    标签: visual-studio-2008 configuration


    【解决方案1】:

    是的,这是您看到的正确行为。可执行文件首先在与 .exe 相同的目录中查找 .config 文件。不知道它在哪里看,但如果它在那里找到它,它会使用那个。我会做更多的研究,看看是否默认搜索任何其他路径。


    Here

    默认情况下,应用程序 默认配置文件 appdomain(和其他 appdomains v1.1 及更高版本)正在进行中 exe的目录和命名相同 进程exe +“.config”。这是 即使该 exe 不受管理也是如此。 另外,请注意 web.config 文件是 app.config - ASP.NET 将其设置为 您的 appdomain 的配置文件。

    要更改配置文件,请设置 AppDomainSetup.ConfigurationFile 到 新位置并通过 AppDomainSetup 到您的呼叫 AppDomain.CreateDomain()。然后,运行 所有需要的代码 里面的应用程序配置 新的应用程序域。

    但请注意,您将无法 通过设置选择 CLR 版本 配置文件——此时, CLR 已经在运行,并且 每个进程只能有一个。

    应用程序配置文件是 每个应用程序域。所以,你可以设置一个‘dll config' 使用上面的方法,但是 这意味着它将用于 整个appdomain,它只会得到 一个。

    【讨论】:

    • 谢谢,戴夫,你所附的链接是你需要做的尽可能多的研究(我很感激)。我只是想消除由于不熟悉 .config 文件而做错事的可能性。如果这是规则,那就是规则。我在其他地方看到人们在测试和调试期间使用 Post-Build 事件将 app.config 文件的源代码控制版本复制到适当的目录;我将使用这种方法。感谢您的帮助。
    【解决方案2】:

    默认情况下,配置是从应用程序所在的同一目录加载的。在调试环境中,这是\bin\Debug。但是,如果它是您项目的一部分,则您的项目应该为您部署该配置。

    【讨论】:

    • “部署”是指使用构建后事件将 app.config 文件复制到适当的目录之类的东西吗?谢谢,拉塞尔。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多