gpt4 book ai didi

c# - 获取第一个执行程序集返回 null

转载 作者:太空宇宙 更新时间:2023-11-03 11:33:26 26 4
gpt4 key购买 nike

我正在尝试使用以下代码获取第一个执行程序集:

AssemblyName entryAssembly = Assembly.GetEntryAssembly().GetName(); 

不过我得到了一个空异常。不过,GetExecutingAssembly() 和 GetCallingAssembly() 函数会返回值。在文档中,它提到从非托管代码调用时它可以返回 null。我认为我的代码不属于这一类。

我正在使用 Visual Studio 开发服务器在 Visual Studio 中运行 ASP.NET MVC 2 应用程序。

知道为什么我会得到一个空值吗?

最佳答案

这是设计使然。引自宪兵(注意:我引用的是我自己的话):

This rule warns when an assembly without an entry point (i.e. a dll or library) calls Assembly.GetEntryAssembly (). This call is problematic since it will always return null when called from outside the root (main) application domain. This may become a problem inside libraries that can be used, for example, inside ASP.NET applications.

来自 https://github.com/spouliot/gendarme/wiki/Gendarme.Rules.BadPractice.GetEntryAssemblyMayReturnNullRule%282.10%29

编辑:以上回答“为什么”(您提出的问题)。一种可能的解决方法是创建 StackTrace 并迭代每个 StackFrame 直到顶部以查看它来自哪个程序集。然而,这只有在从主(网络)应用程序线程完成时才有效(如您希望的那样)(即非常注意从哪里调用它)。

关于c# - 获取第一个执行程序集返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7029998/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com