Asp.net 加载配置文件时出错:未能映射路径'/';

Asp.net 加载配置文件时出错:未能映射路径'/';,asp.net,.net,web-config,relative-path,Asp.net,.net,Web Config,Relative Path,加载配置文件时出错:未能映射路径“/”。当我尝试运行以下行以获取web.config的路径时 Configuration config =System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~"); 我正在运行Windows 7、Visual studio 2010和.net framework 4.0。现在我知道这个问题是通过以管理员身份运行VisualStudio来解决的,在以管理员身份运行之前,我已

加载配置文件时出错:未能映射路径“/”。当我尝试运行以下行以获取web.config的路径时

Configuration config =System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
我正在运行Windows 7、Visual studio 2010和.net framework 4.0。现在我知道这个问题是通过以管理员身份运行VisualStudio来解决的,在以管理员身份运行之前,我已经多次运行了相同的代码,但今天以管理员身份运行并不能解决这个问题。我在我的队友的笔记本电脑上运行了相同的代码,代码运行得非常完美,当我在笔记本电脑上运行代码时,它就不工作了


我已经尝试了所有的方法,有没有一种方法我可以给出一个绝对路径,让它暂时工作,我的windows会成为一个问题,因为它最近的状况很糟糕。请提供帮助,因为获取配置文件的位置会浪费我很多时间。您可以执行以下操作:

AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
如果希望引用该文件,则可以执行以下操作:

ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

试试这个,它对我一直都很有用:

Configuration config 
     =System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~/");
甚至这个:

Configuration config 
         =System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("./");
确保有对
System.Configuration.dll
assembly的引用

看起来您正试图从应用程序打开Web.Config配置文件,所以您也可以使用下面的配置文件。这意味着你不需要打开文件。检查


我遇到了同样的问题,最初我使用的是作为管理员启动VisualStudio的相同解决方法

最后,我试着做了一些测试,结果是:如果你为web.config创建了一个文件映射,那么应用程序将在没有管理员权限的情况下加载该配置

我使用了中的示例,但做了一些修改:

    public static Configuration GetConfiguration()
    {
        if (HostingEnvironment.ApplicationVirtualPath == "/")
            return WebConfigurationManager.OpenWebConfiguration("~/web.config");

        WebConfigurationFileMap fileMap = CreateFileMap(HostingEnvironment.ApplicationVirtualPath);
        // Get the Configuration object for the mapped virtual directory.
        return WebConfigurationManager.OpenMappedWebConfiguration(fileMap, HostingEnvironment.ApplicationVirtualPath);
    }

    private static WebConfigurationFileMap CreateFileMap(string applicationVirtualPath)
    {

        WebConfigurationFileMap fileMap =
               new WebConfigurationFileMap();

        // Get he physical directory where this app runs. 
        // We'll use it to map the virtual directories 
        // defined next.  
        string physDir = HostingEnvironment.ApplicationPhysicalPath;

        // Create a VirtualDirectoryMapping object to use 
        // as the root directory for the virtual directory 
        // named config.  
        // Note: you must assure that you have a physical subdirectory 
        // named config in the curremt physical directory where this 
        // application runs.
        VirtualDirectoryMapping vDirMap =
            new VirtualDirectoryMapping(physDir, true);

        // Add vDirMap to the VirtualDirectories collection  
        // assigning to it the virtual directory name.
        fileMap.VirtualDirectories.Add(applicationVirtualPath, vDirMap);

        // Create a VirtualDirectoryMapping object to use 
        // as the default directory for all the virtual  
        // directories.
        VirtualDirectoryMapping vDirMapBase =
            new VirtualDirectoryMapping(physDir, true, "web.config");

        // Add it to the virtual directory mapping collection.
        fileMap.VirtualDirectories.Add("/", vDirMapBase);

        // Return the mapping. 
        return fileMap;
    }
我认为这不是一个很酷的补丁,但它可以工作,并且可以包含在#if调试部分中

有了这些,我推断,当您启动Visual Studio web development server并将虚拟路径设置设置为“/MyApplication”时,如果它是以管理员权限启动的,则会创建一些映射,而在没有管理员权限时不会创建这些映射。这只是一个我无法证实的假设


我希望这能帮助别人

每次我遇到“无法映射路径”时,都会出现权限问题。这也解释了为什么它在以管理员身份运行时仍然有效(直到今天?)。我会确保你已经读/写了所有的源代码和目录。很少有文件会锁定它们。我将尝试使它们可写打开您的vs管理员它会以配置文件的形式返回文件吗?或者返回路径?@ffayyaz:返回web.config文件的完整物理路径
    public static Configuration GetConfiguration()
    {
        if (HostingEnvironment.ApplicationVirtualPath == "/")
            return WebConfigurationManager.OpenWebConfiguration("~/web.config");

        WebConfigurationFileMap fileMap = CreateFileMap(HostingEnvironment.ApplicationVirtualPath);
        // Get the Configuration object for the mapped virtual directory.
        return WebConfigurationManager.OpenMappedWebConfiguration(fileMap, HostingEnvironment.ApplicationVirtualPath);
    }

    private static WebConfigurationFileMap CreateFileMap(string applicationVirtualPath)
    {

        WebConfigurationFileMap fileMap =
               new WebConfigurationFileMap();

        // Get he physical directory where this app runs. 
        // We'll use it to map the virtual directories 
        // defined next.  
        string physDir = HostingEnvironment.ApplicationPhysicalPath;

        // Create a VirtualDirectoryMapping object to use 
        // as the root directory for the virtual directory 
        // named config.  
        // Note: you must assure that you have a physical subdirectory 
        // named config in the curremt physical directory where this 
        // application runs.
        VirtualDirectoryMapping vDirMap =
            new VirtualDirectoryMapping(physDir, true);

        // Add vDirMap to the VirtualDirectories collection  
        // assigning to it the virtual directory name.
        fileMap.VirtualDirectories.Add(applicationVirtualPath, vDirMap);

        // Create a VirtualDirectoryMapping object to use 
        // as the default directory for all the virtual  
        // directories.
        VirtualDirectoryMapping vDirMapBase =
            new VirtualDirectoryMapping(physDir, true, "web.config");

        // Add it to the virtual directory mapping collection.
        fileMap.VirtualDirectories.Add("/", vDirMapBase);

        // Return the mapping. 
        return fileMap;
    }