none
GetType-Zugriff in unterschiedlichen Namensraum RRS feed

  • Frage

  • Salü zäme
    Ich verstehe da was nicht. Ich arbeite in zwei Namensräumen. Der eine heisst z.B. "AstroDLL" der ander "PrintList".
    Im Namensraum "AstroDLL" befindet sich eine Klasse:
    namespace AstroDLL
    {
      [Serializable()]
      public class classSetRise
      {
        private string _sName = "";
        .... 
        ....
    
        public classSetRise()
        {
        }
    
        public string Name
        {
          get { return this._sName; }
          set { this._sName = value; }
        }
    
        ....
        ....
    }
    

    Im zweiten Namensraum "PrintList" möchte ich die Property dieser Klasse auslesen. Dazu habe ich eine Methode geschrieben:

        public static PropertyInfo[] getListeProperty(string sKlasseName)
        {
          Type typeKlasse = Type.GetType(sKlasseName);
          if (typeKlasse != null)
            return typeKlasse.GetProperties(BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance);
          else
            return null;
        }
    

    Verwende ich diese Methode im Namensraum "AstroDLL" und rufe diese mit dem Parameter "AstroDLL.classSetRise" auf, so erhalte ich diese Properties aufgelistet.
    Verwende ich aber diese Routine im Namensraum "PrintList", so gibt mir diese Methode den Wert null zurück, weil GetType() null zurück gibt. Dies, obwohl auf die Klasse "classSetRise" in diesem Namensraum zugegriffen werden kann.

    Meiner Meinung nach müsste ich mit dieser Methode auch im Namenraum "PrintList" die Auflistung der Klasse "classSetRise" erhalten können.
    Kann mir dies jemand erklären??

    Besten Dank und Gruss
    Jakob Brunner


    Jakob Brunner, Switzerland
    Freitag, 29. Oktober 2010 07:15

Antworten

  • Hallo Jakob

    neben dem Namensraum gilt auch die enthaltende Assembly...
    Ist denn dein  'AstroDLL'  etwa in einer anderen Assembly (DLL!) als PrintList?

    Lies Bedingung auf:

    http://msdn.microsoft.com/de-de/library/w3f99sx1.aspx

     "Wenn sich der Typ in der aktuell ausgeführten Assembly oder in Mscorlib.dll befindet,
      ist eine Angabe des Typnamens einschließlich des qualifizierenden Namespace ausreichend"

    ansonst muss eben die Assembly-qualifizierung mit rein.

    Beachte, falls die 'Astro-Assembly' eh schon per Verweis eingebunden wurde, geht darauf oft 'direkter':
    Assembly.GetType
    http://msdn.microsoft.com/de-de/library/19y21115.aspx

    oder möglicherweise gar optimalerweise ein C#
    typeof(AstroDLL.classSetRise)
    bzw via typeof eines bereits bekannten Typs aus der Assembly, grob
     typeof(knownTypeInAstro).Assembly.GetType("AstroDLL.classSetRise")

    • Als Antwort markiert Jakob.Brunner Freitag, 29. Oktober 2010 07:40
    Freitag, 29. Oktober 2010 07:21

Alle Antworten

  • Hallo Jakob

    neben dem Namensraum gilt auch die enthaltende Assembly...
    Ist denn dein  'AstroDLL'  etwa in einer anderen Assembly (DLL!) als PrintList?

    Lies Bedingung auf:

    http://msdn.microsoft.com/de-de/library/w3f99sx1.aspx

     "Wenn sich der Typ in der aktuell ausgeführten Assembly oder in Mscorlib.dll befindet,
      ist eine Angabe des Typnamens einschließlich des qualifizierenden Namespace ausreichend"

    ansonst muss eben die Assembly-qualifizierung mit rein.

    Beachte, falls die 'Astro-Assembly' eh schon per Verweis eingebunden wurde, geht darauf oft 'direkter':
    Assembly.GetType
    http://msdn.microsoft.com/de-de/library/19y21115.aspx

    oder möglicherweise gar optimalerweise ein C#
    typeof(AstroDLL.classSetRise)
    bzw via typeof eines bereits bekannten Typs aus der Assembly, grob
     typeof(knownTypeInAstro).Assembly.GetType("AstroDLL.classSetRise")

    • Als Antwort markiert Jakob.Brunner Freitag, 29. Oktober 2010 07:40
    Freitag, 29. Oktober 2010 07:21
  • JA, das ist es demnach... ja es sind unterschiedliche Assembly.

    Ist mir nun aber nicht bekannt, wie der Assambly-Name angegebe werden muss, um eine "Assembly-qualifizierung" zu erhalten.
    Kannst du mir diese bitte zeigen?

    Besten Dank und Gruss
    Jakob Brunner


    Jakob Brunner, Switzerland
    Freitag, 29. Oktober 2010 07:30
  • Jakob,

    siehe oben meine weiteren Anmerkungen, die Frage ist da insbesondere ob die Astro-Assembly explizit per Verweis eingebunden wurde, oder zu Laufzeit per Assembly.Load  oä.
    Freitag, 29. Oktober 2010 07:32
  • Hallo Jakob,

    eine Beschreibung dazu findest Du in Angeben vollständig gekennzeichneter Typnamen

    Geliefert wird die Information u. a. durch die Type. AssemblyQualifiedName-Eigenschaft

    Gruß Elmar

    Freitag, 29. Oktober 2010 08:05
    Beantworter