DllImport属性是否始终加载非托管DLL

Mar*_*n B 6 .net c#

这个问题激励我提出以下问题.即使您没有调用/使用该方法,DllImport属性是否始终加载特定的DLL.

例如,当您有以下代码时:

static class Program {

    [DllImport("kernel32.dll")]
    static extern bool AllocConsole();

    static void Main()
    {
        if (true)                                
        {
            //do some things, for example starting the service.
        }
        else 
        {
            AllocConsole();
        }           
     }        
 }
Run Code Online (Sandbox Code Playgroud)

现在,当应用程序启动时,AllocConsole永远不会被激活但是dll会被加载吗?

Kol*_*lja 4

正如MSDN所说:

定位和加载 DLL,以及在内存中定位函数的地址仅在第一次调用该函数时发生。

但是您可以通过在属性中指定不存在的 dll 来轻松验证这一点。