MVC3

2011-09-29 25 views
23

yılında Server.MapPath kullanarak ben kodMVC3

string xsltPath = System.Web.HttpContext.Current.Server.MapPath(@"App_Data") + "\\" + TransformFileName 

O Neden ServiceController, SERVICENAME yolunu alıyorum

C:\inetpub\wwwroot\websiteName\SERVICENAME\App_Data\FileName.xsl

döndürür var? Ben Sen sanal kökünden başlamak istediğinizi belirtmeniz gerekir

C:\inetpub\wwwroot\websiteName\App_Data\FileName.xsl

cevap

57

olduğu App_Data yolunu istiyorum: Ayrıca

string xsltPath = Path.Combine(System.Web.HttpContext.Current.Server.MapPath(@"~/App_Data"), TransformFileName); 

, bu yolları birleştirmek için Path.Combine kullanmak daha pratiktir dizeleri birleştirmek yerine. Path.Combine, çift yollu ayırıcılarla bir durumda sonuçlanmayacağınızdan emin olacaktır.

DÜZENLEME:

onlar için "fiziksel" ve "sanal" yollarını karşılaştırmak nasıl "mutlak" ve "göreli" yolları gösterir ve miyiz?

MSDN, good explanation bağıntılı, fiziksel ve sanal yollara sahiptir. Oraya bir bak.

+0

Bu çalışır. "Sanal kök" ile ilgili bir yazı okuyorum ama iyi takip etmedim. http://www.dotnetperls.com/mappath "Mutlak" ve "göreceli" yolları tanımlayabilir ve "fiziksel" ve "sanal" yollarla nasıl karşılaştırabilirler? –

+1

@ P.Brian.Mackey: Mutlak, "/ someTopDirectory/someSubDirectory" gibi kökten gelen yol anlamına gelir. Göreceli, şu anda bulunduğunuz yerden bir yol demektir, bu nedenle "someSubDirectory" dizinindeyseniz ve "someTopDirectory" konumuna gitmek istiyorsanız, göreceli bir yol ".." (bir dizine geçin) olur. Fiziksel yollar, sistem onları gördükleri yollardır: "C: \ inetpub \ myApp \ someTopDirectory \ someSubDirectory". Sanal yollar, bir web sunucusu uygulaması olarak görür: "/ someTopDirectory/someSubDirectory". –

+0

@ P.Brian.Mackey: Durumunuz için daha fazla açıklığa kavuşturmak için MapPath, sanal yolu fiziksel yola dönüştürür. Sanal yolun parametrenizde, göreceli olan yerine mutlak bir yol sağlamak istersiniz. Bir web uygulamasındaki mutlak yol için "kök" ü belirten işaret "~" dir, yani mutlak sanal kök = "~ /". –

0

Bunu beğenerek deneyin (@"~/App_Data"). ~/, kök dizini temsil eder.

AppDomain.CurrentDomain.GetData("DataDirectory").ToString() 

Bu hala App_Data dizinine dosya yolunu döndürür: Şimdiye kadar verilen

6

cevaplar aradığınızı vardır, ama senin özel durumda, bence, ne gerçek bir ihtiyaç şudur Bu dizin adı MVC veya ASP.NET'in gelecek sürümlerinde değişirse.

+0

Bunun iyi bir fikir olduğunu sanmıyorum. Belgelenmemiş (resmi) AppDomain parametresine güveniyorsunuz, bu bir uygulama detayı. App_Data'dan daha fazla değişme olasılığı daha yüksektir. – vcsjones

+0

Belgelendirilmiş ve standarttır, ancak ASP.Net için değil, ADO.Net içindir. 'DataDirectory' değişmeyecek, ancak her zaman 'App_Data' işaret etmeyebilir. – codekaizen