[C#] Dynamische Assemblies

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von live2b, 8. Dezember 2008 .

Schlagworte:
  1. 8. Dezember 2008
    Dynamische Assemblies

    Hallo alle RRler und Frohe Weihnachten!

    Ich habe in letzter Zeit ein ziemlich blödes Problem.
    Man nehme sich eine Anwendung (Host) und möchte das der Host mehrere Unteranwendungen (AddIns) dynamisch laden, benutzen und entladen kann. Kein Problem.

    Problem kommt aber mit dem Sinne, dass jedes AddIn in einer eigenen AppDomain ausgeführt wird. Sprich ich habe ein ToolStrip-Steuerelement im Host, dessen Adresse peer Methode an das AddIn weitergegeben wird. Dort soll das AddIn ein ToolStripButton erstellen (dies geschieht in der AppDomain des AddIns) und soll dann in das ToolStrip des Hosts (AppDomain des Hosts) als Item hinzugefügt werden. Da kommt schon ein Fehler:

    System.Windows.ToolStripButton is not serializable.

    Der Loader der Assemblies sieht so aus:

    Code:
     public Boolean Load()
     {
     Boolean rData = false;
     if (!this.bLoaded)
     {
     rData = true;
     AppDomainSetup ads = new AppDomainSetup();
     Evidence e = AppDomain.CurrentDomain.Evidence;
    
     ads.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory;
     ads.PrivateBinPath = ads.ApplicationBase;
    
     this.locatedDomain = AppDomain.CreateDomain(this.iPInfo.Name, e, ads);
    
     try
     {
     this.loadedPlugIn = (IPlugIn)this.locatedDomain.CreateInstanceFromAndUnwrap(this.iPInfo.FullPath, "BusinessManager.AddOn");
     }
     catch
     {
     rData = false;
     }
     }
     this.bLoaded = rData;
     return rData;
     }
    
    Die zu ladende Assembly ist ein AddIn, Code:

    Code:
    using ...;
    
    namespace BusinessManager
    {
     [Serializable()]
     public class AddOn : MarshalByRefObject, IPlugIn
     {
     private IList<User> listOfUsers = new List<User>();
     private IPluginHost fParent = null;
    
     public String Name { get { return "Benutzer-Manager"; } }
     public String Description { get { return "Die Beschreibung mach ich später"; } }
     public String Author { get { return "Live"; } }
     public Boolean HaveFormStatus { get { return true; } }
     public Boolean HaveFormWidget { get { return true; } }
     public Form Parent { set { this.fParent = (IPluginHost)value; this.Start(); } }
    
     private void Start() { }
     public AddOn() { }
     public void Init(String strInitData) { }
     public String GetInitData() { return null; }
     public void Dispose() { }
     public Object[] Command(String strCommand, Object[] objArgs)
     {
     Object[] rData = null;
     if (strCommand == "CTSB")
     {
     ToolStripButton tsb = new ToolStripButton("Usermanager Status");
     ToolStrip ts = (ToolStrip)objArgs[0];
     ts.Items.Add(tsb);
     }
     return rData;
     }
     public Form GetFormStatus() { return new frmStatus(); }
     public Form GetFormWidget() { return new frmWidget(); }
     }
    }
    
    Sorry wegen dem Code, muss den irgendwie zusammenquetschen ^^

    Der Fehler tritt bei der Zeile "ts.Items.Add(tsb);" ein. Was mach ich da falsch?
     
  2. 9. Dezember 2008
    AW: Dynamische Assemblies

    Naja hat irgend jemand von euch mal was mit Serialize zu tun gehabt? Oder anders, wie kriege ich diesen ToolStrip-Button "Serialized"?
     
  3. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.