Hallo liebe Community,
ich spiele gerade etwas mit dem
Leider bekomme ich immer die Fehlermeldung, dass das Objekt nicht mit dem Zieltyp übereinstimmt (Zeile 33).
Hier der Quellcode der Bibliothek, welche ich als Assembly lade:
Spoiler anzeigen
Und hiermit lade ich die Assembly:
Spoiler anzeigen
Mit Debugger kann ich das alles schön sehen:
Edit:
Ich kenne hier zwar das Attribute in der DLL, allerdings möchte ich auch externe, mir unbekannte .Net-DLLs laden können, wo ich erstmal keine Attribute kenne...
Was mache ich falsch?
ich spiele gerade etwas mit dem
Reflections
-Namespace herum und habe mich gefragt, ob es damit auch möglich ist, Felder/Properties von CustomAttributes auszulesen, welche einer Methode zugeordnet sind.Leider bekomme ich immer die Fehlermeldung, dass das Objekt nicht mit dem Zieltyp übereinstimmt (Zeile 33).
Hier der Quellcode der Bibliothek, welche ich als Assembly lade:
C#-Quellcode
- using System;
- namespace EducationLibrary
- {
- public class SpecialMethodAttribute : Attribute
- {
- public string Field_ID;
- public string Property_ID { get; set; }
- }
- public class EducationLibrary
- {
- #region methods
- #region private
- private void PrivateMethod()
- {
- }
- #endregion
- #region internal
- internal void InternalMethod()
- {
- }
- #endregion
- #region public
- public void PublicMethod()
- {
- }
- #endregion
- #endregion
- #region functions
- #region private
- private bool PrivateBoolFunction()
- {
- return true;
- }
- #endregion
- #region internal
- internal bool InternalBoolFunction()
- {
- return true;
- }
- #endregion
- #region public
- public bool PublicBoolFunction()
- {
- return true;
- }
- public bool PublicBoolFunctionWithParameter(bool par1)
- {
- return true;
- }
- public bool PublicBoolFunctionWithParameters(bool par1, bool par2)
- {
- return true;
- }
- [SpecialMethod(Field_ID = "34284", Property_ID = "123")]
- public bool PublicBoolFunctionWithParametersAndAttribute(bool par1, bool par2)
- {
- return true;
- }
- #endregion
- #endregion
- }
- }
Und hiermit lade ich die Assembly:
C#-Quellcode
- private void ReadAssembly()
- {
- using( var dialog = new OpenFileDialog())
- {
- dialog.Filter = "Assembly files|*.dll;*.exe";
- if( dialog.ShowDialog() == DialogResult.OK)
- {
- #region *** Load assembly ***
- var assembly = Assembly.LoadFile( dialog.FileName );
- #endregion
- #region *** Get types ***
- var types = assembly.GetExportedTypes();
- if (types.Length > 0)
- {
- foreach (var type in types)
- {
- #region *** Get methods ***
- var methods = type.GetMethods( BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly );
- if (methods.Length > 0)
- {
- foreach (var method in methods)
- {
- #region *** Get custom attributes ***
- var customAttributes = method.GetCustomAttributes( true );
- if (customAttributes.Length > 0)
- {
- foreach (var customAttribute in customAttributes)
- {
- var attributeType = customAttribute.GetType();
- var props = customAttribute.GetType().GetProperties();
- foreach (var prop in props)
- {
- MessageBox.Show( prop.GetValue( prop.ReflectedType ).ToString() );
- }
- }
- }
- #endregion
- }
- }
- #endregion
- }
- }
- #endregion
- }
- }
- }
Mit Debugger kann ich das alles schön sehen:
Edit:
Ich kenne hier zwar das Attribute in der DLL, allerdings möchte ich auch externe, mir unbekannte .Net-DLLs laden können, wo ich erstmal keine Attribute kenne...
Was mache ich falsch?
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „TRiViUM“ ()