我收到配置文件时发生错误:无法映射路径'/'。当我尝试运行以下行来获取web.config
的路径时Configuration config =System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
我正在运行Windows 7,Visual Studio 2010和.net framework 4.0。现在我知道通过以管理员身份运行visual studio解决了这个问题,我在以管理员身份运行之前已经多次运行相同的代码,但是今天以管理员身份运行也没有解决问题。我在我的队友的笔记本电脑上运行相同的代码,代码工作正常,当我在笔记本电脑上运行该代码时,它无效。
我已经尝试过所有的东西,有没有办法可以给出一个绝对的路径让它暂时工作,我的窗户可能是一个问题,因为它最近状况不佳。请帮忙,因为它浪费了我很多时间
答案 0 :(得分:5)
我遇到了同样的问题,最初我使用的是以管理员身份启动Visual Studio的相同解决方法。
最后我尝试做了一些测试并得到了这个:如果你为web.config创建了一个文件映射,那么应用程序就会加载没有管理员权限的配置。
我使用了http://msdn.microsoft.com/en-us/library/system.web.configuration.webconfigurationmanager.openmappedwebconfiguration(v=vs.110).aspx中的示例,但进行了一些修改:
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 DEBUG部分中。
有了这些,我推断当你启动Visual Studio Web开发服务器时,将虚拟路径设置设置为类似" / MyApplication",如果它已经以管理员权限启动,它会创建一些映射没有权限时不创建。这只是一个我无法验证的假设。
我希望这会有所帮助!
答案 1 :(得分:1)
要获取配置文件的位置,您可以执行以下操作:
AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
如果您想要引用该文件,那么您可以这样做:
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
答案 2 :(得分:1)
尝试这个,一直对我有用:
Configuration config
=System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~/");
或者甚至是这个:
Configuration config
=System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("./");
确保您引用System.Configuration.dll
程序集。
您似乎正在尝试从应用程序中打开Web.Config Configuartion文件,因此您也可以使用下面的文件。这意味着你无论如何都不需要打开文件。检查MSDN here。
var section = WebconfigurationManager.GetSection("Section_Name");