10

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

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

提前致谢。

4

3 回答 3

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

希望它有帮助。

于 2013-04-15T07:37:16.500 回答
13

据我了解,您需要当前的组装位置

static public string CurrentAssemblyDirectory()
{
    string codeBase = Assembly.GetExecutingAssembly().CodeBase;
    UriBuilder uri = new UriBuilder(codeBase);
    string path = Uri.UnescapeDataString(uri.Path);
    return Path.GetDirectoryName(path);
}
于 2014-04-29T09:28:48.350 回答
4

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

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

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

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

希望这可以帮助。

于 2013-04-15T07:46:57.757 回答