Dawno dawno temu było…Reflector i długo długo nic (de facto na początku był jest ildasm ale nie o nim dziś). Na szczęście pewnego lutowego dnia pojawiła się informacja, że już niedługo nie będzie on dostępny za darmo i się zaczęło. Flame’y, groźby i krzyki :). Stało się też sporo dobrego bo o to na rynku pojawiły się alternatywy. Ilspy, dotPeek oraz JustDecompile. Przyjrzyjmy się im z bliska i zobaczmy co mają do zaoferowania. Reflector - umarł król...Reflector to zdecydowanie n...
autor: We wtorek miałem przyjemność wygłosić prelekcję prelekcję na temat Mono.Cecil na Wrocławskiej Grupie .NET. W sesji starałem się zaprezentować czym jest Mono.Cecil oraz jakie daje nam możliwości jeśli chodzi o przeglądanie, modyfikację plików assembly. Mam nadzieję, że za pomocą przykładów: generatora statystyk, automatyczną implementację INotifyPropertyChnaged wraz z użyciem MSBuild task pokazałem jak możemy wykorzystać Mono.Cecil, aby ułatwić naszą pracę. Dodatkowo poprzez zaprezentowanie proste...
Używając analizy kodu w projektach .NET 4.0 można natknąć się na taki oto komunikat: CA1026: Microsoft Design: Replace method xyz with an overload that supplies all default arguments. W dokumentacji do tego ostrzeżenia czytamy, że choć używanie metod opcjonalnych jest dozwolone w specyfikacji CLS, to dozwolone jest także ich ignorowanie. Przyjrzyjmy się więc temu nieco bliżej. Parametry opcjonalne Na tapetę weźmiemy tę oto prostą metodę: public void OptionalMethod(string name, int value = 42) { ...
Kilka dni temu Sławek napisał tekst o ukrywaniu kodu i skorzystał z klasy DynamicMethod, dzięki której generował kod IL w trakcie wykonania programu. Był również na tyle uprzejmy, że podesłał mi przykładowy kod, dzięki któremu zaoszczędziłem trochę czasu i mogłem zająć się od razu konkretem. Mam nadzieję, ze nie będzie na mnie zły jak wrzucę całościowo część tego kodu, dostępnego również w jego notce... :) Dla przypomnienia zatem, Sławkowi zależało na ukryciu szczegółów metody GetValue, tak, aby po dezas...
Stanąłem ostatnio przed następującym problemem: ukryć algorytm (w tym wypadku zawartość metody) tak, żeby przynajmniej na pierwszy rzut oka nie dało się go przeczytać. Pogrzebałem troche w róźnych helpach i innych internetach i stwierdziłem, że idealnie do tego celu nada się klasa DynamicMethod. Jak się okazało łatwiej powierdzieć, trudniej zrobić. Jak zawsze zresztą...