Sto sviluppando un’applicazione che è una estensione di un’applicativo , il tutto in managed c++. Per caricare i miei assemblies di varie funzioni specializzate, avevo usato la strada della GAC e quella della modifica application.exe.config.
Soluzione1 non bella, perchè queste dll non erano poi cosi’ tanto generalpurpose e poi mi potevano interferire con altre installazioni.
Soluzione 2 non bella perchè andavo a modificare dei file proprietari dell’applicativo, ad un suo re-install venivano perse le mie modifiche. Ho trovato in rete la soluzione 3, la riassumo J
Nella fase di caricamento : prendo il dominio corrente dell’applicazione e metto un gestore dell’evento di errore nel caricamento degli assemblies:
AppDomain^ currentDomain = AppDomain::CurrentDomain;
currentDomain->AssemblyResolve +=
gcnew System::ResolveEventHandler( &miaclasse::MyResolveEventHandler);
e poi lo gestisco, andando a prendere l’assembly proprio nella mia dir:
System::Reflection::Assembly ^ miaclasse::MyResolveEventHandler(Object^ sender, ResolveEventArgs^ args)
{ //------ qui prendo il mio percorso di installazione dei miei componenti
//e lo metto in String^ path -------
//nome dell’assembly da caricare
String^ strTempAssmbPath=args->Name->Substring(0,args->Name->IndexOf(","))+".dll";
//percorso completo
String^ fullPath = System::IO::Path::Combine(path, strTempAssmbPath);
//carico il tutto e lo ritorno !
Assembly^ MyAssembly = Assembly::LoadFrom(fullPath);
return MyAssembly;
}
Funziona!