【发布时间】:2015-08-24 09:06:18
【问题描述】:
我有 2 个项目的 C# 解决方案:
- DLLTest(控制台应用)
- BLib(库)
在 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;
}
}
}
【问题讨论】:
标签: c# .net dll .net-assembly