: ASP.NETRuta de archivo absoluto o relativo en el marco web.config
Decir que tengo a mi sitio web ubicado en D: \ Webhome. La estructura es, como a continuación
D:\Webhome
|
|-web.config
|-default.aspx
|-folder_1
| |- file1
|
|-folder_2
Me preguntaba es mejor utilizar ruta absoluta o relativa en web.config para hacer referencia a los archivos. Estoy usando la ruta absoluta, pero el entorno en mi estación de trabajo es diferente en el servidor de producción, que tiene un sitio web ubicado en E: \ Web. Así que puedo copiar web.config en mi servidor local de producción. En cambio, simplemente copié manualmente la diferencia.
La otra pregunta es cómo usar la ruta relativa. Por ejemplo:
<entry1 name="key1" file="~/folder1/file1">
<entry1 name="key1" file="folder1/file1">
<entry1 name="key1" file="~\folder1\file1">
<entry1 name="key1" file="folder1\file1">
¿Hay algún documento o msdn para esto? por favor asesóreme, gracias.
EDIT:
parece que no funciona para mi caso. Lo he comprobado con HttpContext.Server.MapPath ("~ /") y muestra E:\Webhome
. Y mi xml está en E:\Webhome\QueryDictionary\ITEM.xml
. ¿Puedes ver lo que está mal?
Esta es mi web.config
<queryDictionaries>
<queryDictionary name="ITEM" file="~/QueryDictionary/ITEM.xml" type="Com.Data.SqlServer"/>
</queryDictionaries>
Este es el error que tengo:
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:
Parece que en Com.Data.Query.QueryCommander.LoadDictionaries()
, tengo que usar HttpContext.Server.MapPath()
para analizar la ruta de archivo para obtener la ruta absoluta. ¿Esa es la razón?
¡Amen a eso! : D –
آمين (Amén en árabe), eso es muy cierto porque la ruta absoluta crea problemas después. –