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.

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