2011-02-17 14 views
5

: 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?

Respuesta

3

http://msdn.microsoft.com/en-us/library/ms178116.aspx
Una ruta relativa lo iniciará en su página actual en su sitio, por lo que no tendrá que preocuparse de nada antes. Lo cual le permite mover su sitio web y no preocuparse por cambiar las rutas de sus archivos. Por ejemplo, si desea acceder a la fichero1 (por ejemplo es un archivo de imagen) de su default.aspx, se diría:

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


Sin embargo, en su archivo web.config tendrá que especificar la raíz de su sitio web utilizando una tilde y la barra inclinada:

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


Hope esto es lo que está buscando, gl

10

por el amor de dios utilizar rutas relativas. Su pequeño problema E: \ web es la punta del iceberg.

+0

¡Amen a eso! : D –

+1

آمين (Amén en árabe), eso es muy cierto porque la ruta absoluta crea problemas después. –

1

HttpContext.Server.MapPath ("~/folder_1/file1") le devuelve la ruta del archivo físico en el mecanizado que aloja el sitio web.

Cuestiones relacionadas