Use este código:
HttpContext.Current.Server.MapPath("~")
Referência detalhada:
Server.MapPath
especifica o caminho relativo ou virtual para mapear para um diretório físico.
Server.MapPath(".")
retorna o diretório físico atual do arquivo (por exemplo, aspx) sendo executado
Server.MapPath("..")
retorna o diretório pai
Server.MapPath("~")
retorna o caminho físico para a raiz do aplicativo
Server.MapPath("/")
retorna o caminho físico para a raiz do nome de domínio (não é necessariamente o mesmo que a raiz do aplicativo)
Um exemplo:
Digamos que você direcionou um aplicativo de site ( http://www.example.com/ ) para
C:\Inetpub\wwwroot
e instalei seu aplicativo de loja (sub web como diretório virtual no IIS, marcado como aplicativo) em
D:\WebApps\shop
Por exemplo, se você ligar Server.MapPath
na seguinte solicitação:
http://www.example.com/shop/products/GetProduct.aspx?id=2342
então:
Server.MapPath(".") returns D:\WebApps\shop\products
Server.MapPath("..") returns D:\WebApps\shop
Server.MapPath("~") returns D:\WebApps\shop
Server.MapPath("/") returns C:\Inetpub\wwwroot
Server.MapPath("/shop") returns D:\WebApps\shop
Se Path começa com uma barra (/) ou uma barra invertida (), o MapPath
método retorna um caminho como se Path fosse um caminho virtual completo.
Se Path não começa com uma barra, o MapPath
método retorna um caminho relativo ao diretório da solicitação que está sendo processada.
Observação: em C #, @ é o operador literal literal de string, o que significa que a string deve ser usada "como está" e não deve ser processada para sequências de escape.
Notas de rodapé
Server.MapPath(null)
e Server.MapPath("")
produzirá esse efeito também.