C# 为什么Server.MapPath在路径中添加额外目录

C# 为什么Server.MapPath在路径中添加额外目录,c#,asp.net,asp.net-web-api,rdlc,server.mappath,C#,Asp.net,Asp.net Web Api,Rdlc,Server.mappath,我正在使用HttpContext.Current.Server.MapPath函数查找StudentReport.rdlc文件,该文件位于类库项目下 解决方案结构: "C:\\Users\\tom\\source\\repos\\WebDemo\\WebDemo\\StudentLib\\Reports\\StudentReport.rdlc" "C:\\Users\\tom\\source\\repos\\WebDemo\\StudentLib\\Reports\\StudentReport

我正在使用
HttpContext.Current.Server.MapPath
函数查找
StudentReport.rdlc
文件,该文件位于
类库项目下

解决方案结构:

"C:\\Users\\tom\\source\\repos\\WebDemo\\WebDemo\\StudentLib\\Reports\\StudentReport.rdlc"
"C:\\Users\\tom\\source\\repos\\WebDemo\\StudentLib\\Reports\\StudentReport.rdlc"

我从名为
WebDemo
webapi项目中调用
类库项目中的以下函数

public class Reports
{
    public string GetReportPath()
    {

        string path1 = System.AppDomain.CurrentDomain.BaseDirectory;

        var path2 = System.Web.HttpContext.Current.Server.MapPath("~/StudentReport.rdlc");

        var path3 = System.Web.HttpContext.Current.Server.MapPath("~/BL/ClassLib/StudentLib
                                                /Reports/StudentReport.rdlc");

        var path4 = System.Web.HttpContext.Current.Server.MapPath("~/StudentLib/Reports
                                                /StudentReport.rdlc");

        string path5 = System.Web.Hosting.HostingEnvironment.MapPath("~/StudentLib/Reports
                                                /StudentReport.rdlc");

        return path5;
    }
}
正如您所看到的,我尝试了
Server.MapPath
的所有组合,但它仍然在所有路径中添加了etc
WebDemo
目录

当前路径:

"C:\\Users\\tom\\source\\repos\\WebDemo\\WebDemo\\StudentLib\\Reports\\StudentReport.rdlc"
"C:\\Users\\tom\\source\\repos\\WebDemo\\StudentLib\\Reports\\StudentReport.rdlc"
预期路径:

"C:\\Users\\tom\\source\\repos\\WebDemo\\WebDemo\\StudentLib\\Reports\\StudentReport.rdlc"
"C:\\Users\\tom\\source\\repos\\WebDemo\\StudentLib\\Reports\\StudentReport.rdlc"
我能知道为什么会这样吗


任何帮助都会很好。

这对我来说很合适。。。看起来有一个解决方案文件夹
WebDemo
,里面有一个项目文件夹,也称为
WebDemo
。您是否在资源管理器中重新检查了它是否正确?i、 e.
C:\Users\tom\source\repos\WebDemo\WebDemo\StudentLib\Reports
是否存在并包含您的文件?注意:库不会从库位置解析-构建时,库通常会复制到构建输出中,应用程序纯粹从那里运行;库有不同的路径这一事实是无关紧要的——这不是它的来源runtime@stom它在类库项目中的位置是毫不相关的;运行的不是类库,而是web应用程序,web应用程序从类库中获得所需内容的副本。如果您需要从web应用解析RDLC,最简单的方法就是将其作为web应用中的内容。如果它“属于”类库,并且应该在使用类库的任何地方都可用,那么您可能正在寻找嵌入式资源。但是,在使用时,它不再有物理路径。@stom取决于它名义上“属于”的位置;正如Damien所指出的,您可以使用嵌入式资源,但是访问这些资源的API是完全不同的(它不是一个文件,但您仍然可以为它获得一个
),在我看来是正确的。。。看起来有一个解决方案文件夹
WebDemo
,里面有一个项目文件夹,也称为
WebDemo
。您是否在资源管理器中重新检查了它是否正确?i、 e.
C:\Users\tom\source\repos\WebDemo\WebDemo\StudentLib\Reports
是否存在并包含您的文件?注意:库不会从库位置解析-构建时,库通常会复制到构建输出中,应用程序纯粹从那里运行;库有不同的路径这一事实是无关紧要的——这不是它的来源runtime@stom它在类库项目中的位置是毫不相关的;运行的不是类库,而是web应用程序,web应用程序从类库中获得所需内容的副本。如果您需要从web应用解析RDLC,最简单的方法就是将其作为web应用中的内容。如果它“属于”类库,并且应该在使用类库的任何地方都可用,那么您可能正在寻找嵌入式资源。但是,在使用时,它不再有物理路径。@stom取决于它名义上“属于”的位置;正如Damien所指出的,您可以使用嵌入式资源,但是访问这些资源的API是完全不同的(它不是一个文件,但您仍然可以得到一个