Я следую методу 3 в http://support.microsoft.com/kb/837908, чтобы динамически загружать сборки в С#. Однако код для меня не работает. В следующем разделе кода автор загружает недостающую сборку только в том случае, если имя отсутствующей сборки является одной из сборок, на которые ссылается приложение.
Когда я запускаю это при отладке, функция вызывается, но недостающая сборка не входит ни в одну из этих ссылок, и поэтому она не задана в моем случае. Любые идеи, почему это происходит? Я не уверен, что эта DLL является С# или родным С++. Может ли это быть, потому что С++ dll не могут быть загружены таким образом? Тогда почему эта функция вызывается для отсутствующей сборки С++? Любые объяснения оцениваются. Если это не работает для сборок С++, на которые ссылаются С#, какие альтернативы?
private Assembly MyResolveEventHandler(object sender,ResolveEventArgs args)
{
//This handler is called only when the common language runtime tries to bind to the assembly and fails.
//Retrieve the list of referenced assemblies in an array of AssemblyName.
Assembly MyAssembly,objExecutingAssemblies;
string strTempAssmbPath="";
objExecutingAssemblies=Assembly.GetExecutingAssembly();
AssemblyName [] arrReferencedAssmbNames=objExecutingAssemblies.GetReferencedAssemblies();
//Loop through the array of referenced assembly names.
foreach(AssemblyName strAssmbName in arrReferencedAssmbNames)
{
//Check for the assembly names that have raised the "AssemblyResolve" event.
if(strAssmbName.FullName.Substring(0, strAssmbName.FullName.IndexOf(","))==args.Name.Substring(0, args.Name.IndexOf(",")))
{
//Build the path of the assembly from where it has to be loaded.
strTempAssmbPath="C:\\Myassemblies\\"+args.Name.Substring(0,args.Name.IndexOf(","))+".dll";
break;
}
}
//Load the assembly from the specified path.
MyAssembly = Assembly.LoadFrom(strTempAssmbPath);
//Return the loaded assembly.
return MyAssembly;
}