首页 > 解决方案 > 可以是 assembly.Location 等于 null 吗?

问题描述

我在这里找到了这段代码。

var assembly = Assembly.GetExecutingAssembly();
if (assembly.Location == null)
{
  throw new NullReferenceException("Executing assembly is null!"); // Is it possible???
}

可以assembly.Location等于null吗?

标签: c#

解决方案


  1. 文档明确指出 Location可能会返回一个空字符串("")
  2. 查看源代码,您可能对以下文件感兴趣:

a) RuntimeAssembly.cs

[DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode)]
private static extern void GetLocation(QCallAssembly assembly, StringHandleOnStack retString);

b)汇编原生.cpp

void QCALLTYPE AssemblyNative::GetLocation(QCall::AssemblyHandle pAssembly, 
QCall::StringHandleOnStack retString)
{
    QCALL_CONTRACT;
    BEGIN_QCALL;
    {
        retString.Set(pAssembly->GetFile()->GetPath());
    }
    END_QCALL;
 }

c) 最后一个问题是我们能否找到 GetPath() 实现。我认为它在这里: peimagelayout.inl

inline const SString &PEImageLayout::GetPath()
{
    LIMITED_METHOD_CONTRACT;
    return m_pOwner?m_pOwner->GetPath():SString::Empty();
}

它似乎不返回空值,而是返回空字符串。我在 C++ 方面一点也不强,所以如果有人证实我的假设会很好。


推荐阅读