2015-08-24 45 views
0

我有2項目C#的解決方案:爲什麼AssemblyResolver即使在加載DLL(手動)時也會啓動?

  1. DLLTest(控制檯應用程序)
  2. BLIB(庫)

在DLLTest我設置參考BLIB和設置複製本地屬性設置爲false。
編譯解決方案。
將BLib.dll複製到'C:\ BLib.dll'並運行應用程序。
在我的代碼的第一步中,我從路徑'C:\ BLib.dll'加載程序集,然後從那裏調用方法。從BLib程序集調用AssemblyResolver的方法並嘗試加載我手動加載的程序集。

我可以做一些應用程序來知道庫已經被加載並且不會再嘗試加載它嗎?
這是BClass.cs文件從BLIB項目:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace BLib 
{ 
    public class BClass 
    { 
     public static void PrintName() 
     { 
      Console.WriteLine("BLib"); 
     } 
    } 
} 

這是Program.cs的從DLLTest項目文件:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Reflection; 

namespace DLLTest 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; 
      Assembly.LoadFile(@"C:\BLib.dll"); 
      Console.WriteLine("Loaded assembles:"); 
      AppDomain.CurrentDomain.GetAssemblies().ToList() 
       .ForEach(p => Console.WriteLine(p)); 
      Console.WriteLine("End list of assembles"); 
      try 
      { 
       PrintMessage(); 
      } 
      catch(Exception ex) 
      { 
       Console.WriteLine(ex.Message); 
      } 
      Console.ReadKey(); 
     } 

     private static void PrintMessage() 
     { 
      BLib.BClass.PrintName(); 
     } 

     private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) 
     { 
      Console.WriteLine(args.Name); 
      return null; 
     } 
    } 
} 

回答

相關問題