OpenExeConfiguration路径问题

时间:2011-11-11 17:07:33

标签: c# asp.net asp.net-mvc configuration web-config

我正在尝试从服务器加载web.config。 它位于:\ server \ folders \ web.config

当我尝试这个时:

 ConfigurationManager.OpenExeConfiguration(@"\\server\folders\web.config");

它搜索:web.config.config并失败。

 ConfigurationManager.OpenExeConfiguration(@"\\server\folders\web");

失败,因为没有文件夹\ server \ folders \ web \

所以我尝试了几件事,看起来路径所指向的文件存在,然后它应用了.config并获取配置文件。

为了好玩,我创建了一个web.loaders文件和一个web.loaders.config文件。与

 ConfigurationManager.OpenExeConfiguration(@"\\server\folders\web.local");

它完美地加载了\ server \ folders \ web.local.config,但抛出了没有web.local文件的异常。

所以有很多方法可以加载这个小东西,但是不是比使用temp .web文件更好的吗?

3 个答案:

答案 0 :(得分:8)

ConfigurationManager.OpenExeConfiguration用于加载可执行文件的配置,因此确实需要.exe文件的完整路径。配置文件应与.exe位于同一目录中,并具有扩展名.exe.config,因此它不适合加载ASP.NET网站的配置。更好的选择是使用WebConfigurationManagerOpenWebConfiguration方法是正常的,如果你从网站内打开配置,因为它需要配置的虚拟路径,但如果你从控制台应用程序打开它,那么你需要看看在OpenMappedWebConfiguration方法。 documentation举例说明了如何实现这一目标。

Stack Overflow上还有previous question and answer显示如何执行此操作。

答案 1 :(得分:1)

您需要先将虚拟路径映射到物理路径。

string configPath = HttpContext.Current.Server.MapPath("~/server/folders/web.local");      
ConfigurationManager.OpenExeConfiguration(configPath);

虚拟路径开头的〜转到应用程序的根目录。如果您从页面引用相关文件,则可能不想使用它。

答案 2 :(得分:0)

假设共享存在,听起来可能是权限问题。您是否尝试过为运行该应用程序的帐户提供 share 文件夹权限?

enter image description here