2013-04-15 17 views
9

我有一個Web應用程序,它有許多類庫項目。下面的一些示例代碼。如何在類庫項目中使用Server.MapPath

public static class LenderBL 
{ 
    static string LenderXml { get { return "MyPathHere"; } } 

    public static LenderColl GetLenders() 
    { 
     var serializer = new XmlSerializer(typeof(LenderColl)); 

     using (XmlReader reader = XmlReader.Create(LenderXml)) 
     { 
      return (LenderColl)serializer.Deserialize(reader); 
     } 
    } 
} 

我通常會使用到使用Server.Mappath取得的財產LenderXml的路徑,但是當我在類庫使用它返回父解決方案的路徑,而不是該類庫項目。

有沒有辦法讓類庫文件項目本身的路徑?

在此先感謝。

回答

28
var Mappingpath = System.Web.HttpContext.Current.Server.MapPath("pagename.aspx"); 

希望它的幫助。

+1

和參考的System.Web。 –

+2

System.Web庫將需要引用,不僅僅是指定的。 –

+1

@自由職業者 - 抱歉,也許我不清楚我的問題。我可以訪問類庫中的Server.MapPath,它是如何返回父項目的路徑。我正在尋找獲得類庫項目的路徑。 – dotnetnoob

3

Server.MapPath將始終運行在web根目錄的上下文中。所以,在你的情況下,web根目錄是父項目。雖然您的類庫(程序集)看起來像單獨的項目,但在運行時它們都被託管在Web項目過程中。因此,需要考慮類庫中的資源。

首先,考慮將資源保存在類庫中是否有意義。也許,你應該在web項目中有xml文件,並在類庫中引用它。這與MVC項目如何在Web項目中保留其視圖無異。但是,我認爲你不能這樣做。

其次,您可以更改您的xml文件的構建屬性。如果您將文件更改爲其屬性中的contentcopy-always。該文件將複製到bin目錄。然後Server.MapPath應該工作,因爲該文件將被訪問。

第三,您可以使資源embedded resource,然後在代碼中引用它。這是將所有資源保留在構建的程序集本地的一種方法。

希望這會有所幫助。

+0

這絲毫不能回答這個問題。 –

+2

@GrantThomas OP說「Server.MapPath」正在工作,但返回父項目的路徑。我只能假設父項目意味着託管的Web項目。這三個選項都是引用庫中代碼引用xml文件內容的所有方法。所以我讀它的方式,這是一個非常合理的答案。 –

10

至於我能理解你所需要的電流裝配地點

static public string CurrentAssemblyDirectory() 
{ 
    string codeBase = Assembly.GetExecutingAssembly().CodeBase; 
    UriBuilder uri = new UriBuilder(codeBase); 
    string path = Uri.UnescapeDataString(uri.Path); 
    return Path.GetDirectoryName(path); 
} 
+1

這是我發現的唯一解決方案,它實際上可以在類庫和Web應用程序中使用。謝謝 –

相關問題