http://support.microsoft.com/kb/837908の方法3に従って、C#でアセンブリを動的にロードしています。ただし、コードが機能していません。コードの次のセクションでは、欠落しているアセンブリの名前がアプリケーションによって参照されているアセンブリの1つである場合にのみ、作成者は欠落しているアセンブリをロードします。
これをデバッグで実行すると、関数が呼び出されますが、欠落しているアセンブリは参照されているアセンブリのいずれにも含まれていないため、私の場合は設定されていません。なぜこれが起こっているのか、何か考えはありますか?そのDLLがC#なのかネイティブC++なのかわかりません。これは、C ++ dllをこの方法でロードできないためでしょうか?では、なぜこの関数が欠落しているC++アセンブリに対して呼び出されるのでしょうか。説明をいただければ幸いです。これがC#から参照されるC ++アセンブリで機能しない場合、代替手段は何ですか?
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;
}