首先执行程序集返回null

时间:2011-08-11 17:06:27

标签: c# asp.net-mvc

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

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

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

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

为什么我得到一个空的任何想法?

1 个答案:

答案 0 :(得分:2)

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

  

当没有入口点的程序集(即dll或.dll)时,此规则会发出警告   library)调用Assembly.GetEntryAssembly()。这个电话有问题   因为从根外部调用时它总是返回null   (主要)申请领域。这可能会成为库内的问题   例如,可以在ASP.NET应用程序中使用。

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

编辑:以上回答“为什么”(您提出的问题)。一个可能的解决方法是创建一个StackTrace并迭代每个StackFrame直到顶部以查看它来自哪个程序集。但是,这只能在您从主要(Web)应用程序线程完成时(例如,非常注意调用它的位置)工作。