Skip to: Site menu | Main content

Autor

Chłopak z Bałut (Dołów), po uniwerku i stypendium. Wiecznie zestresowane, przemądrzałe bezguście. Więcej na stronie domowej.

Reflection Emit, czyli narzekania na Microsoft ciąg dalszy

Czepianie, Klepanie

Resztki mojego wewnętrznego przekonania, że programiści Microsoftu przygotowują elegancki kod i wspaniałe API (patrz poprzednie przygody), odeszły dzisiaj całkowicie do lamusa. Od rana jeden z moich kolegów siedział nad rozszerzeniami do Visual Studio. Klął przy tym niemiłosiernie bo dokumentacji do tego brak jakiejkolwiek, a do części funkcjonalności po prostu nie sposób się dobrać.

Ja tymczasem siedzę nad generatorem kodu i natrafiłem na kolejne kwiatki w moim ulubionym nejmspejsie. Po pierwsze radzę uważać na argumenty przekazywane do metody Emit, bo mogą nadpisać następne instrukcje. Konkretnie chodzi o tego typu wywołanie: ilGenerator.Emit(OpCodes.Ldarg, num). Jeśli num jest mniejszy od inta, to następne wygenerowane instrukcje zostaną potraktowane jako fragment argumentu instrukcji Ldarg... no ale tak to jest, jak się robi tyle przeciążeń. Po drugie zaś dowiedziałem się, że nie przewidziano API umożliwiającego dostęp do GACa. Jak poinformowali nas autorzy dokumentacji:

If you use the GAC, this directly exposes your application to assembly binding fragility or may cause your application to work improperly on future versions of the .NET Framework. (...) The actual storage location and structure of the GAC is not documented and is subject to change in future versions of the .NET Framework and the Microsoft Windows operating system.

No nic... póki co najlepszym API dostępu do GACa jest chyba opakowanie sobie gacutila.

25 września 2006, 20:22:35

Komentarze

Treść komentarza można formatować zgodnie ze składnią Textile.
Odpowiedzi śledzić można przy pomocy RSS RSS .