簡體   English   中英

如何在類庫項目中使用Server.MapPath

[英]How can I use Server.MapPath inside class library project

我有一個Web應用程序,它有許多類庫項目。 下面是一些示例代碼。

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的路徑,但是當我在類庫中使用它時,它將返回父解決方案的路徑,而不是類庫項目的路徑。

有沒有辦法獲得類庫項目本身的路徑?

提前致謝。

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

希望它有所幫助。

據我所知,您需要當前的裝配位置

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

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

首先,考慮將資源保留在類庫中是否有意義。 也許,您應該在Web項目中使用xml文件,並在類庫中引用它。 這與MVC項目如何在Web項目中保持其觀點等效。 但是,我認為你不能這樣做。

其次,您可以更改xml文件的構建屬性。 如果將文件更改為contentcopy-always在其屬性中進行copy-always 該文件將復制到bin目錄。 然后Server.MapPath應該工作,因為該文件是可訪問的。

第三,您可以將資源設置為嵌入式資源 ,然后在代碼中引用它。 這是一種將所有資源保留在構建程序集本地的方法。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM