У меня две сборки: App
и AddOn
. App
ссылки AddOn
, но CopyLocal
установлен на false
, так как AddOn
будет динамически загружаться с помощью App
.
Вот код в AddOn
:
namespace AddOn
{
public class AddOnClass
{
public static void DoAddOnStuff()
{
Console.WriteLine("AddOn is doing stuff.");
}
}
}
и вот код в App
:
class Program
{
static void Main(string[] args)
{
Assembly.LoadFrom(@"..\..\..\AddOn\bin\Debug\AddOn.dll");
// Without this event handler, we get a FileNotFoundException.
// AppDomain.CurrentDomain.AssemblyResolve += (sender, e) =>
// {
// return AppDomain.CurrentDomain.GetAssemblies()
// .FirstOrDefault(a => a.FullName == e.Name);
//};
CallAddOn();
}
[MethodImpl(MethodImplOptions.NoInlining)]
private static void CallAddOn()
{
AddOnClass.DoAddOnStuff();
}
}
Я не понимаю, почему код не работает с обработчиком AssemblyResolve
, указанным в Main()
. При запуске в Visual Studio отладчик разбивается на CallAddOn()
с помощью FileNotFoundException
. Почему он жалуется? Сборка загружена, и она представляет собой ту же самую версию (то есть файл на диске), как то, на что ссылался App
.
Я чувствую, что существует некоторая фундаментальная концепция, которую я не понимаю здесь. Прокомментированный обработчик AssemblyResolve
отлично работает, но кажется, что он взломан, и я не понимаю, зачем мне это нужно, потому что кажется, что он делает что-то тривиальное.