web.config中的绝对或相对文件路径

时间:2011-02-17 01:31:57

标签: asp.net

框架:ASP.NET

说我的网站位于 D:\ Webhome 。结构如下所示

D:\Webhome
   |
   |-web.config
   |-default.aspx
   |-folder_1
   |  |- file1
   |
   |-folder_2

我想知道在web.config中使用绝对或相对路径来引用文件会更好。我使用绝对路径,但我的工作站中的环境在生产服务器中是不同的,其生成服务器的网站位于 E:\ Web 。所以我可以将本地的web.config复制到生产服务器上。相反,我只是手动复制差异。

另一个问题是如何使用相对路径。例如:

<entry1 name="key1" file="~/folder1/file1">
<entry1 name="key1" file="folder1/file1">
<entry1 name="key1" file="~\folder1\file1">
<entry1 name="key1" file="folder1\file1">

是否有msdn或文件?请指教,谢谢。



修改
这对我的案子似乎不起作用。我已经检查过HttpContext.Server.MapPath(“〜/”),它显示E:\Webhome。我的xml在E:\Webhome\QueryDictionary\ITEM.xml。你能看出出了什么问题吗?

这是我的web.config

  <queryDictionaries>
    <queryDictionary name="ITEM" file="~/QueryDictionary/ITEM.xml" type="Com.Data.SqlServer"/>
  </queryDictionaries>

这是我得到的错误:

System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Program Files\Common Files\Microsoft Shared\DevServer\10.0\~\QueryDictionary\ITEM.xml'.
  at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
  at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath)
  at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize)
  at System.Xml.XmlDownloadManager.GetStream(Uri uri, ICredentials credentials, IWebProxy proxy, RequestCachePolicy cachePolicy)
  at System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri, String role, Type ofObjectToReturn)
  at System.Xml.XmlTextReaderImpl.OpenUrlDelegate(Object xmlResolver)
  at System.Threading.CompressedStack.runTryCode(Object userData)
  at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
  at System.Threading.CompressedStack.Run(CompressedStack compressedStack, ContextCallback callback, Object state)
  at System.Xml.XmlTextReaderImpl.OpenUrl()
  at System.Xml.XmlTextReaderImpl.Read()
  at System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean preserveWhitespace)
  at System.Xml.XmlDocument.Load(XmlReader reader)
  at System.Xml.XmlDocument.Load(String filename)
  at Com.Data.Query.QueryCommander.LoadDictionaries()



EDIT2:
看起来在Com.Data.Query.QueryCommander.LoadDictionaries()中,我必须使用HttpContext.Server.MapPath()来解析文件路径以获取绝对路径。那是什么原因吗?

3 个答案:

答案 0 :(得分:10)

对于上帝的爱,使用相对路径。你的小E:\ web问题是冰山一角。

答案 1 :(得分:3)

http://msdn.microsoft.com/en-us/library/ms178116.aspx
相对路径将从您网站的当前页面开始,因此您不必担心其他任何事情!这使您可以移动您的网站,而不用担心更改文件路径。 例如,如果您想从default.aspx访问file1(比如图像文件),您会说:

<img src="folder_1/file1.jpg" />


但是,在您的web.config文件中,您需要使用tilda和正斜杠指定网站的根目录:

<authentication mode="Forms">
  <forms loginUrl="~/index.aspx" name="adAuthCookie" path="/">
  </forms>
</authentication>

希望这就是你要找的,gl

答案 2 :(得分:1)

HttpContext.Server.MapPath(“〜/ folder_1 / file1”)为您提供托管网站的机器上物理文件的路径。