我有2个项目的C#解决方案:
在DLLTest中,我设置了对BLib的引用,并将Copy Local属性设置为false
编译解决方案。
将BLib.dll复制到' C:\ BLib.dll'并运行申请
在我的代码的第一步中,我从路径' C:\ BLib.dll'加载程序集。然后从那里调用方法。在从BLib程序集调用方法时触发AssemblyResolver并尝试加载我手动加载的程序集。
我可以做一些应用程序知道库已经加载而不再尝试加载吗? 这是来自BLib项目的 BClass.cs 文件:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BLib
{
public class BClass
{
public static void PrintName()
{
Console.WriteLine("BLib");
}
}
}
这是来自DLLTest项目的 Program.cs 文件:
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;
}
}
}
答案 0 :(得分:0)
我发现了类似的问题Why is AssemblyResolve called when Assembly is in CurrentDomain?从那里回答Choosing a Binding Context,其中详细描述了所有内容( )。< / p>
我认为如此,这是安全原因。