这question激励我提出以下问题。即使您没有调用/使用该方法,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();
}
}
}
现在,当应用程序启动时,AllocConsole永远不会被激活但是dll是否会被加载?
答案 0 :(得分:4)
答案 1 :(得分:3)
我做了一点测试。以下程序运行良好:
static class Program {
[DllImport("doesnotexist.dll")]
static extern bool AllocConsole();
static void Main() {
if (false) AllocConsole();
}
}
以下程序在AllocConsole()行上引发DllNotFoundException。
static class Program {
[DllImport("doesnotexist.dll")]
static extern bool AllocConsole();
static void Main() {
if (true) AllocConsole();
}
}
所以看起来dll只在第一次调用时加载。