【问题标题】:System.Reflection.Assembly.GetEntryAssembly() is null when calling from Web App [duplicate]从 Web 应用程序调用时 System.Reflection.Assembly.GetEntryAssembly() 为空 [重复]
【发布时间】:2013-02-14 10:15:38
【问题描述】:

我正在 Visual Studio 2010 中使用目标框架 - 3.5 开发一个 Web 应用程序 我正在使用一个 dll(由另一个团队开发),其中出现以下代码错误:

    string strName = System.Reflection.Assembly.GetEntryAssembly().GetName().Name;

我检查并发现 System.Reflection.Assembly.GetEntryAssembly() 正在返回 null,并在 msdn 上搜索并发现 GetEntryAssembly() 在从任何非托管代码调用时可能返回 null。

当我从我的 Web 应用程序调用时,它返回 null,当我从任何 Windows 应用程序调用时,它工作正常,即它获取条目程序集名称(开始执行的程序集)。为什么它在 Web 应用程序中返回 null?我无法理解。 我还尝试从 Visual Studio 中的项目属性将我的 Web 项目的输出类型更改为类库,但是输出类型的下拉菜单被禁用,我无法更改项目的输出类型。 如果此问题存在任何解决方案,请帮助我。

提前致谢

阿米特·沙哈尼

【问题讨论】:

    标签: c# system.reflection


    【解决方案1】:

    是否管理 ASP.Net 主机进程。答案是不。因此,您的网络应用中GetEntryAssembly 的结果为空。

    解决方案完全取决于您的第三方程序集试图做什么以及它为什么调用GetEntryAssembly

    您可以创建一个可执行程序来托管程序集并在单独的进程中启动它,然后调用将返回您的可执行程序集。但是,这可能不是最好的做法,这取决于您想要实现的总体目标。

    【讨论】:

    • 我应该创建另一个类库项目,然后从该项目中调用这个程序集吗?
    • @Amit24,你需要启动一个新进程,入口 assembley 是启动新进程的程序集。您需要制作一个可执行程序集并从那里调用您的第三方 dll。然后使用Process.Start 启动您的可执行主机。 msdn.microsoft.com/en-us/library/…,这可能是也可能不是最好的解决方案,正如我在回答中所说的那样。
    • 好的,现在我明白了,我需要一个可执行程序集,因为该过程应该从那里开始。非常感谢您的帮助。
    猜你喜欢
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    相关资源
    最近更新 更多