Blog Stats
  • Posts - 16
  • Articles - 0
  • Comments - 122
  • Trackbacks - 31

 

Caricamento assemblies da percorsi alternativi

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!


Feedback

# re: Caricamento assemblies da percorsi alternativi

Gravatar Anzichè gestire un eccezione (che comunque viene generata e quindi causa "rallentamenti") io utilizzerei un file di configurazione con la direttiva assemblyBinding es.:

<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="nomeAssembly" />
<codeBase href="FILE://c:/../posizionedelladll.dll" />
</dependentAssembly>
...

In questo modo il binding corretto avviene in maniera completamente trasparente.
9/13/2007 3:40 AM | Gabriele Gaggi

# re: Caricamento assemblies da percorsi alternativi

Gravatar e puoi anche indicare i path in cui il load di assembly di .NET va a guardare.
questo path può essere assoluto e anche relativo :

<configuration xmlns:asm="urn:schemas-microsoft-com:asm.v1">
<runtime>
<asm:assemblyBinding>
<asm:probing privatePath="runtime" />
</asm:assemblyBinding>
</runtime>
</configuration> 9/13/2007 4:28 AM | Luca Minudel

# Penny stocks.

Gravatar Gold stocks. Top stocks. Stocks under ten dollars. Savage rifle stocks. Replacement rifle stocks. Bullpup stocks. Stocks. 4/24/2008 1:22 PM | Stocks.

# Ephedra.

Gravatar Denver ephedra attorney. Weight loss pills with ephedra. Fda approved ephedra for 2006. Ephedra. 4/27/2008 8:24 AM | Diet ephedra pill.

# What about all natural skin care arbonne products

Gravatar ...With all natural skin care arbonne products and a healthful diet you make another step for your skin to stay fresh and young looking 1/11/2009 10:19 AM | all natural skin care arbonne

# Levitra.

Gravatar Levitra experience. 5/29/2009 3:18 AM | Levitra.

# หนังxออนไลน์ฟรี

Gravatar Caricamento assemblies da percorsi alternativi 10/25/2014 8:12 AM | หนังxออนไลน์ฟรี

Post a comment





 

Please add 6 and 8 and type the answer here:

 

 

Copyright © Bruna Gavioli