Sto scrivendo un prototipo per dimostrare la fattibilità di qualcosa su cui sto lavorando. Fondamentalmente, richiede il caricamento degli assembly non su disco in un dominio dell'applicazione. In superficie, sembra facile. In effetti, è un gioco da ragazzi nel mondo WinForms in cui un processo è un processo.Come caricare dinamicamente gli assembly non su disco in un'applicazione Web ASP .Net?
Per le applicazioni Web ASP.Net, è un po 'squirreloso. Ho funzionato al 99,99%. Il metodo attuale è alquanto funziona così:
public class AppDomainManager : System.AppDomainManager
{
PhantomAssemblyLoader m_phantomAssemblyLoader;
public AppDomainManager()
{
m_phantomAssemblyLoader = new PhantomAssemblyLoader();
}
public override void InitializeNewDomain(AppDomainSetup appDomainInfo)
{
m_phantomAssemblyLoader.Attach(AppDomain.CurrentDomain);
}
}
public class PhantomAssemblyLoader
{
public PhantomAssemblyLoader()
{
}
public void Attach(AppDomain appDomain)
{
appDomain.AssemblyResolve += new ResolveEventHandler(AssemblyResolve);
appDomain.DomainUnload += new EventHandler(DomainUnload);
}
public void Detach(AppDomain appDomain)
{
appDomain.AssemblyResolve -= AssemblyResolve;
appDomain.DomainUnload -= DomainUnload;
}
void DomainUnload(object sender, EventArgs e)
{
this.Detach(sender as AppDomain);
}
private Assembly AssemblyResolve(object sender, ResolveEventArgs args)
{
Assembly asssembly = Assembly.Load(BlackMagic.GetBytes(sender, args));
return asssembly;
}
}
Il problema sembra essere che un nuovo dominio di applicazione è istanziata e scaricato per ogni caricamento della pagina. Il codice sopra carica l'assembly richiesto, lo scarica, lo carica di nuovo e così via. So che questo sta accadendo perché i dati statici all'interno di questi gruppi fantasma non persistono tra i carichi di pagina.
La soluzione corretta può caricare questi gruppi fantasma nello stesso contesto di quegli assembly trovati nella cartella/bin. Questi vengono caricati all'avvio dell'applicazione e non vengono mai scaricati durante la sessione.
Ancora non capisco cosa stai cercando di raggiungere. Puoi scrivere un esempio che dimostri la necessità e la soluzione WinForm? –