我正在尝试从服务器加载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文件更好的吗?
答案 0 :(得分:8)
ConfigurationManager.OpenExeConfiguration
用于加载可执行文件的配置,因此确实需要.exe文件的完整路径。配置文件应与.exe位于同一目录中,并具有扩展名.exe.config,因此它不适合加载ASP.NET网站的配置。更好的选择是使用WebConfigurationManager
。 OpenWebConfiguration
方法是正常的,如果你从网站内打开配置,因为它需要配置的虚拟路径,但如果你从控制台应用程序打开它,那么你需要看看在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 和文件夹权限?