konto usunięte

Temat: Reflection

Witam,

Chciałbym dynamicznie, przez Invoke wywołać np. System.DateTime.Now lub inną metodę/właściwość z którejś biblioteki systemowej. Ogólnie rzecz biorąc to zrobić coś na zasadzie mechanizmu, który po otrzymaniu pełnej ścieżki do metody (namespace, klasa, metoda) wykona ją.

W jaki sposób to zrobić? Wiem, że łatwo wykonać taki manewr po wczytaniu konkretnej assembly, jednak jak wczytać assembly z framework? Czy jest jakiś uniwersalny Path do systemowych dll's?

konto usunięte

Temat: Reflection

W Visual Studio otwórz sobie okienko dodawania referencji do projektu i tam zobacz gdzie które biblioteki leżą. Zdaję się że biblioteki .NET leżą katalogu C:/Windows/Microsoft.NET/* czy coś takiego (pewnie różnie w zależności od jakiego Windowsa XP-7 czy też wersji x86/x64). Generalnie może być ci ciężko zrobić automatyczne wyszukiwanie bibliotek po nazwie, chyba że założysz listę przypuszczalnych katalogów gdzie one mogą się znajdować i będziesz wyszukiwać po kolei.

Zdaje się, że możesz mieć też problem z uprawnieniami jeśli będziesz uruchamiał swoją aplikację z nie-adminowymi uprawnieniami.Marcinu B. edytował(a) ten post dnia 11.09.11 o godzinie 23:49
Krzysztof Raczkowski

Krzysztof Raczkowski Stała współpraca,
Logifact-Systems Sp.
z o.o.

Temat: Reflection

© Artur Druszcz ®:
Witam,

Chciałbym dynamicznie, przez Invoke wywołać np. System.DateTime.Now lub inną metodę/właściwość z którejś biblioteki systemowej. Ogólnie rzecz biorąc to zrobić coś na zasadzie mechanizmu, który po otrzymaniu pełnej ścieżki do metody (namespace, klasa, metoda) wykona ją.

W jaki sposób to zrobić? Wiem, że łatwo wykonać taki manewr po wczytaniu konkretnej assembly, jednak jak wczytać assembly z framework? Czy jest jakiś uniwersalny Path do systemowych dll's?

Piszę zgłowy ...
Z przykładu MSDN:
Assembly.Load("SampleAssembly, Version=1.0.2004.0, Culture=neutral, PublicKeyToken=8744b20f8da049e3");

Czy jak podasz bibliotekę (szczególnie systemową) to nie odnajdzie jej sam ?
Jan Kowalski

Jan Kowalski Specjalista

Temat: Reflection

Jak będziesz miał ścieżkę do typu, to utwórz obiekt typu "Type" dla jego typu. Możliwe, że po drodzę będziesz musiał załadować assembly, module, i dopiero z nich typ.

Jak już będziesz miał typ to musisz się dowiedzieć czy to co chcesz wywołać jest statyczne czy nie. Jeśli nie jest statyczne, to używając "Activator" stwórz instancje tej klasy a następnie tym Type wywolaj InvokeMember. Jeśli jest statyczna to nie musisz Tworzyć instancji.

Ogólnie, to więcej najpier musisz poświęcić kodu na to, żeby dowiedzieć się o tym co się wywyłojuę (refleksją), czy to jest property, method, itd.. a potem odpowiednio nakarmić InvokeMember.

konto usunięte

Temat: Reflection

Dzięki za odpowiedzi. Jestem aktualnie na tym etapie, który opisał Jan i jest trochę z tym szarpania, do tego dochodzi obsługa zwracanych danych. A jeśli chodzi o ścieżkę do systemowych bibliotek można ją uzyskać w następujący sposób:

System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory();

Następna dyskusja:

System.Reflection i walidac...




Wyślij zaproszenie do