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

Sta*_*tan 5 asp.net

框架:ASP.NET

说我的网站位于D:\ Webhome.结构如下

D:\Webhome
   |
   |-web.config
   |-default.aspx
   |-folder_1
   |  |- file1
   |
   |-folder_2
Run Code Online (Sandbox Code Playgroud)

我想知道在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">
Run Code Online (Sandbox Code Playgroud)

是否有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>
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

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()
Run Code Online (Sandbox Code Playgroud)



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

Wya*_*ett 10

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


Nic*_*ndo 3

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

<img src="folder_1/file1.jpg" />
Run Code Online (Sandbox Code Playgroud)


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

<authentication mode="Forms">
  <forms loginUrl="~/index.aspx" name="adAuthCookie" path="/">
  </forms>
</authentication>
Run Code Online (Sandbox Code Playgroud)


希望这就是您正在寻找的,gl