Pereiti prie turinio

Dynamic assembly load problema


Rekomenduojami pranešimai

Noriu uzloadinti assembly bei kviest metodus dinamiskai. Turiu Interface IPrintable, implementoju i reikiamias klases bet kazkodel kai uzloadinu assembly ir tikrinu klases ar jos implementina IPrintable, nerodo jog jos si interface implementuotu. Kame problemos gal zinot? (suklydau su temos pavadinimu :) )

 



   class Program
   {
       private static readonly List<IPrintable> ThirdPartyClasses = new List<IPrintable>();

       static void Main(string[] args)
       {
           LoadAssemblys(AppDomain.CurrentDomain.BaseDirectory);

           foreach (var thirdPartyClass in ThirdPartyClasses)
           {
               thirdPartyClass.Print();
           }

           Console.ReadLine();
       }

       static void LoadAssemblys(string assemblyPath)
       {
           var assemblyFiles = Directory.EnumerateFiles(
               assemblyPath, "*.dll", SearchOption.TopDirectoryOnly);

           foreach (var assemblyFile in assemblyFiles)
           {
               var asm = Assembly.Load(AssemblyName.GetAssemblyName(assemblyFile));

               foreach (var type in asm.ExportedTypes)
               {
                   if (typeof(IPrintable).IsAssignableFrom(type) && type.IsClass)
                   {
                       var instance = Activator.CreateInstance(type) as IPrintable;
                       ThirdPartyClasses.Add(instance);
                   }
               }
           }
       }
   }

 

Implementacija:


public class UpdateOne : IPrintable
   {
       public void Print()
       {
           Console.WriteLine("Update one succeded.");
       }

       public string Message
       {
           get { return "update one"; }
       }
   }

 

 

Ir dar gaunu error is VS. Screenas: http://s13.postimg.o.../Untitled_2.jpg

Redagavo highontrance
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Erm.

 

3rdPartyLib.dll projekto dabartiniame solution'e nėra?

3rdPartyLib.dll bent kaip reference pridėtas prie solution'o?

Ar tiesiog permeti tą dll'ą į debug/bin katalogą?

Kur tavo IPrintable guli?

 

Ką VS error'as reiškia - kad .pdb failo nėra arba jis senesnės versijos. Jeigu to 3rdPartyLib.dll nėra solution'e - jo neperkompiliuos.

 

Šiaip suzipink savo projektą ir priattachink čia.

 

---

 

Suprantu, ką tu nori padaryti, pats teisingiausias būdas būtų su Managed Extensibility Framework (MEF) įgyvendinti.

Redagavo Deviltry
Nuoroda į pranešimą
Dalintis kituose puslapiuose

3rdPartyLib.dll projekto dabartiniame solution'e nėra?

3rdPartyLib.dll bent kaip reference pridėtas prie solution'o?

Ar tiesiog permeti tą dll'ą į debug/bin katalogą?

Kur tavo IPrintable guli?

 

Ką VS error'as reiškia - kad .pdb failo nėra arba jis senesnės versijos. Jeigu to 3rdPartyLib.dll nėra solution'e - jo neperkompiliuos.

 

Šiaip suzipink savo projektą ir priattachink čia.

 

---

 

Suprantu, ką tu nori padaryti, pats teisingiausias būdas būtų su Managed Extensibility Framework (MEF) įgyvendinti.

 

1. Yra (bet esme viso sito galvoti, kad nera :) )

2. Jis tik turi reference i SharedObjects assembly nes naudoja Interface is jo

3. Taip, permuetu tik dll.

4. SharedObjects dll

 

 

Buvo 3 projektai solution'e: EntryPoint (Mayn), SharedObjects, 3rdPartyLib.

Esme buvo dinamiskai uzloadinti 3rdPartyLib, surasti jame klase kuri implementina "IPrintable" ir tesiog kviesti metoda.

 

Solution'a uploadinau ce: http://s000.tinyuplo...858165095525228

(Nekreipkit demesio i uzvardinima Project.StrongNameblabla tiesiog kaika kitka dariau ir liko taip)

 

O problema buvo ta, kad nereferencinau 3rdPartyLib is dll kur yra Main(); Na esme ir buvo nereferencinti. Norejau padaryti (ir vis dar noriu :) ) Kad tarkim as deploinu kurnors solutiona, ir dar ten yra tarkim direktorija "Addons" ir ,kad tiesiog imtu ir loadintu man assembli'us is tos direktorijos kurios implementina Interface (siuo atveju IPrintable). O references tureti kaip ir negaliu nes tu dll dar kaip ir nera prikurta (ce teoriskai) Sorry jog taip velai ce atrasiau, tiesiog neuzsistovejau ties siuo daliku ir toliau nagrinejau reflection :)

Kaiptik dabar ziuriu apie MEF.

Redagavo highontrance
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...