【问题标题】:Get entry assembly from ASP.NET application [duplicate]从 ASP.NET 应用程序获取入口程序集 [重复]
【发布时间】:2012-10-05 05:33:54
【问题描述】:

可能重复:
GetEntryAssembly for web applications

有一个类库通过调用GetEntryAssembly() 来获取它的执行程序集位置。但是在 ASP.NET Web 应用程序中使用该类库,该函数返回 null。

是否可以从它调用的类库中获取 ASP.NET 应用程序可执行文件的位置?

GetCallingAssembly() 不适合,因为该函数不是直接从 Web 应用程序调用的。

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    查看HttpRuntime.BinDirectory - “获取当前应用程序的 /bin 目录的物理路径。”

    这应该会返回您的网络应用程序的所有 dll 都存储在其中的目录。

    编辑:

    好的,根据您的反馈,这可能有效:

    var webApplicationType = typeof(MyWebApplicationClass);
    var assemblyPathAndName = new System.Uri(webApplicationType.Assembly.CodeBase)).LocalPath;
    

    您需要将“MyWebApplicationClass”替换为 Web 项目中您想要的程序集路径和名称的任何类的名称。

    【讨论】:

    • 我需要同时发现路径和可执行文件名。我希望该方法可以在 win 应用程序和 Web 应用程序中通用
    • 啊啊...给出循环引用
    • 类库应该引用web应用
    • 哦,我明白了,在这种情况下,您有 2 个选择:1) 将代码移动到 Web 应用程序中。 2) 使类库中的方法接收路径
    【解决方案2】:

    我认为 Server.MapPath 可以解决您的问题,请查看此答案:- Server.MapPath("."), Server.MapPath("~"), Server.MapPath(@"\"), Server.MapPath("/"). What is the difference?

    如果你还需要找到汇编路径,那么你可以使用 string fullPath = System.Reflection.Assembly.GetAssembly(typeof(DaoTests)).Location;

    查看以下内容了解更多信息:- How do I get the path of the assembly the code is in?

    【讨论】:

    • 使用 typeof 将提供类库程序集位置。我想使用一些通用方法能够从适用于 win 和 web 应用程序的类库中获取入口程序集
    • 哦!为此,我认为@Trevor 的建议必须有效
    • 我不想要循环引用
    【解决方案3】:

    尝试使用反射,如下所示。

    string path = new System.Uri(Assembly.GetExecutingAssembly().CodeBase)).LocalPath;
    

    希望对您有所帮助。

    谢谢 温和的

    【讨论】:

    • 谢谢,但这提供了类库程序集,而不是 Web 应用程序程序集
    • @ChesnokovYuriy 我认为 GetExecutingAssembly() 会给消费者组装。 msdn.microsoft.com/en-us/library/aa457089.aspx
    • 不,它返回执行程序集,它是类库
    猜你喜欢
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 2014-03-28
    • 1970-01-01
    • 2011-12-29
    • 2013-04-19
    • 1970-01-01
    • 2010-10-12
    相关资源
    最近更新 更多