【问题标题】:How can I use Server.MapPath inside class library project如何在类库项目中使用 Server.MapPath
【发布时间】:2013-04-15 07:33:14
【问题描述】:

我有一个 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 的路径,但是当我在类库中使用它时,会返回父解决方案的路径,而不是类库项目的路径。

有没有办法获取类库项目本身的路径?

提前致谢。

【问题讨论】:

    标签: c# asp.net server.mappath


    【解决方案1】:
        var Mappingpath = System.Web.HttpContext.Current.Server.MapPath("pagename.aspx");
    

    希望对您有所帮助。

    【讨论】:

    • System.Web 库需要被引用,而不仅仅是指定。
    • @Freelancer - 抱歉,我的问题可能不清楚。我可以访问类库中的 Server.MapPath,但是它返回到父项目的路径。我正在寻找类库项目的路径。
    【解决方案2】:

    据我所知,您需要当前的装配位置

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

    【讨论】:

    • 这是我发现的唯一一个在类库和网络应用程序中都有效的解决方案。谢谢
    【解决方案3】:

    Server.MapPath 将始终在 Web 根目录的上下文中运行。因此,在您的情况下,Web 根目录是父 Web 项目。虽然您的类库(程序集)看起来像单独的项目,但在运行时,它们都托管在 Web 项目进程中。因此,对于类库中的资源,有几点需要考虑。

    首先,考虑将资源保留在类库中是否有意义。也许,您应该在 web 项目中有 xml 文件,并在类库中引用它。这等同于 MVC 项目如何在 Web 项目中保留其视图。但是,我认为您不能这样做。

    其次,您可以更改 xml 文件的构建属性。如果您在其属性中将文件更改为contentcopy-always。该文件将复制到 bin 目录。然后Server.MapPath 应该可以工作,因为该文件可以访问。

    第三,您可以将资源设为embedded resource,然后在代码中引用它。这是一种将所有资源保留在已构建程序集本地的方法。

    希望这会有所帮助。

    【讨论】:

    • 这丝毫没有回答问题。
    • @GrantThomas OP 说Server.MapPath 正在工作,但返回父项目的路径。我只能假设父项目意味着 Web 项目托管。这三个选项都是从被引用库的代码中引用xml文件内容的方式。所以按照我的阅读方式,这是一个完全合理的答案。
    猜你喜欢
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 2011-12-22
    • 2021-12-20
    • 1970-01-01
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多