Niedawno oglądałem nagranie z sesji Advanced Debugging with Visual Studio 2010, która prowadził Ingo Rammer. Bardzo fajna sesja, świetnie prowadzona. Pojawiły się na niej ciekawe informacje, które pozwalają ułatwić i urozmaicić sobie sesje w debuggerze Visual Studio. Zainspirowany tematem, postanowiłem na własnej skórze przetestować pokazywane rozwiązania. Poprzednio pokazywałem jak można manipulować wyświetlaniem ...
Autor: Ostatnio, przez ponad pół roku, wraz z Wojtkiem Poniatowskim, Mirkiem Pragłowskim, Tomkiem Wiśniewskim prowadziliśmy kurs C# na portalu VirtualStudy. Kurs przeznaczony był dla osób początkujących ale dzięki temu miałem możliwość zobaczenia jakie elementy .NET i C# sprawiają najwięcej trudności osobom, które dopiero zaczynają swoją przygodę z tą technologią. Jeśli masz choć trochę doświadczenia z .NET to zapewne nie znajdziesz tu zbyt wielu przydatnych informacji. Tak czy inaczej zapraszam do czyta...
blackfoot.pl, autor:Ostatnio wpadła mi w ręce książka The Art of Unit Testing: with Examples in .NET autorstwa Roy’a Osherove’a. Muszę przyznać, że mam nieco mieszane uczucia po jej przeczytaniu. Minusy: Książka liczy około 280 stron, ale czytając ją miałem wrażenie, że ta liczba jest mocno naciągnięta – olbrzymie marginesy, bardzo szeroka czcionka, dużo niezagospodarowanego miejsca itp. Samym formatowaniem można by było zaoszczędzić przynajmniej kilkadziesiąt stron – ile drzew mogłoby wciąż rosnąć! Pie...
Wielojęzyczność aplikacji www można rozwiązać na kilka sposobów. Jedne strony mają rysuneczki flag symbolizujących język, w jakim chcemy widzieć teksty (i nie tylko) i pamiętają to w cookie. Inne pozwalają to ustawić w profilu użytkownika i pamiętają ustawienie w bazie. Ostatnio pisałem rozwiązanie, które ustawia odpowiednią kulturę aplikacji na podstawie informacji wysyłanych przez przeglądarkę podczas żądania.
Dziś kilka słów o tym, czego możemy spodziewać się po .NET jeśli idzie o niektóre możliwości systemu plików. - Panie Michale, to JEDNYM słowem, jak to jest z tym wsparciem dla niektórych rzadziej używanych funkcji systemu plików w .NET? - Dobrze. - A dwoma słowami? - Nie dobrze. Nudne wprowadzenie Wszystkie programy .NET są jednocześnie aplikacjami Win32, co oznacza, że pracują w ramach podsystemu Windows, który realizowany jest przez proces csrss.exe. Jego nazwa rozwija się do Client/Server Run-Time...
Wczoraj miałem przyjemność poprowadzić sesję o testach jednostkowych na spotkaniu studenckiej grupy .NET na PB. Już dobre półtora roku temu postanowiłem sobie, że takie wystąpienia to rzecz nie dla mnie i że więcej nie będę próbował sprawdzać się w ten sposób. Jednak gdy dostałem zaproszenie od Justyny Iwanowskiej, białostockiej SC, zdecydowałem "a co mi tam". Jednocześnie dziękuję za owo zaproszenie:).
« Promowanie pól w schemacieWywołanie orkiestracji z poziomu usługi WCF Coraz częściej zachodzi potrzeba wywołania orkiestracji z usługi WCF. Do tego celu wykorzystywana jest opcja Public – no limit w ustawieniach Receive Port Type. Po opublikowaniu aplikacji na serwerze BizTalk w której ustawiliśmy Access Restrinctions na Public, należy uruchomić BizTalk WCF Publishing Wizard. Za pomocą tego narzędzia wygenerujemy oraz opublikujemy usługę WCF na IIS, która wywoływać będzie orkiestrację: 1. W sekcji WC...
Zdarzenia oraz delegaty (tak to chyba się tłumaczy?) pełnią podobną funkcje w C#. Jaka jest jednak różnica? Przyjrzyjmy się sposobowi ich użycia:class Program { publicstaticevent EventHandler SimpleEvent =null; publicstatic EventHandler SimpleDelegate =null; staticvoid Main(string[] args) { SimpleEvent+=new EventHandler(EventMethod); SimpleDelegate +=new EventHandler(DelegateMethod); SimpleEvent(null, null); SimpleDelegate(null, null); } staticvoid D...
Pisać testy jednostkowe do wszystkiego? Celować w 100% unit-test-code-coverage? Stosować TDD dla każdego rodzaju kodu? Na te pytania bardzo łatwo znaleźć w internecie odpowiedź i brzmi ona: TAK. Niestety nie jest to odpowiedź prawidłowa. Czasem lepiej testu nie napisać, niż go napisać. Czasem lepiej test skasować, niż go po raz dziesiąty poprawiać po zmianie w kodzie.
Czasem przeglądając kod .NET Framework, czy to bezpośrednio w Visual Studio, czy też za pomocą Reflectora (ponownie darmowego ;)), ILSpy, tudzież innych narzędzi do dezasemblacji kodu natrafiamy na kawałek kodu opatrzony atrybutem MethodImpl, np. (dla przykładu System.Object): [MethodImpl(MethodImplOptions.InternalCall)] internalstaticexternint InternalGetHashCode(object obj); I na tym przeglądanie kodu się kończy, a przecież tyle ciekawych rzeczy jest jeszcze do rozpoznania! Lecz gdzie tego szukać?! Zg...
W poprzedniej notce pisałem o implementacji lock’a i do zilustrowania pewnych szczegółów użyłem metody GetHashCode analizowanego obiektu. Tym razem przyjrzymy się bliżej samej metodzie GetHashCode, dziedziczonej przez wszystkie klasy z bazowej klasy Object i często traktowanej po macoszemu, lub też bez właściwego zrozumienia. Niestety potrafi się to zemścić, a w jaki sposób, to spróbuję za chwilę zademonstrować, po czym postaram się podać kilka rad co z tym fantem począć. O tym, że metoda GetHashCode jes...
Dzisiaj króciutki psot na temat różnic między słowem kluczowym const a read-only. Oba słowa służą do deklarowania zmiennych niemodyfikowalnych. Jaka jest więc różnica? const:Nie może być deklarowane z modyfikatorem static – stanowiłoby to pewną nadmiarowość ponieważ stałe odwołują się w końcu do całej klasy a nie instancji (skoro nie mogą być zmodyfikowane nie ma sensu istnienia kopii dla każdej z instancji).Wartość jest przypisywana w czasie kompilacji.Wartość można ustawiać wyłącznie w deklaracji (co ...
« Debugowanie biblioteki pomocniczejPromowanie pól w schemacie Wypełnienie pola w wiadomości z poziomu orkiestracji odbywa się za pomocą wypromowanych pól. W tym celu za pomocą designera schematu należy: 1. Kliknąć prawym na schemacie i wybrać Promote -> Show Promotion 2. Następnie z listy dostępnych pól wybrać pole, które będziemy promować 3. Kliknąć Add, następnie OK Odwołanie się do wypromowanego pola z poziomu orkiestracji odbywa się za pomocą bloczka Message Assignment, w którym wpisujemy:
We wcześniejszych wpisach pojawiły się informacje na temat kompilacji assembly na różne platformy oraz narzędzi, które pozwalają sprawdzić na jaką platformę assembly zostało skompilowane. W tym wpisie znajdą się informacje jak to można zrobić z poziomu kodu źródłowego. Sprawdzenie podczas działania Aby sprawdzić podczas działania programu/procedury, to czy jest on/ona uruchomiona w kontekście 32, czy 64-bitowym w czasach przed .NET 4.0 należało posłużyć się pewnym trick'iem, a mianowicie (tak jak już to...
W poprzednim wpisie pojawiły się informacje na temat sposobów skompilowania assembly, tak by działała jako kod 64 lub 32 –bitowy. W tym wpisie znajdą się informacje na temat tego jak można sprawdzić, na jaką platformę zostało skompilowane assembly (czyli znajdą się tu m.in. informacje na temat narzędzia CorFlags, IL Disassembler'a).CorFlagsNarzędzie CorFlags.exe(NET CorFlags Conversion Tool) pozwala na sprawdzenie lub konfiguracje wykonywalnego assembly, tak by było one traktowane jako 64 lub 32 – bito...
W 64-bitowych systemach Windows mogą działać aplikacje skomplikowane na platformę 64-bitową, jak też w trybie symulacji 32-bitowe (skompilowane na platformę x86, ale ... aplikacja 64-bitowa może korzystać tylko z 64-bitowych komponentów (np. bibliotek), a aplikacja 32-bitowa może korzystać tylko z 32-bitowych komponentów. Do tego na platformie .NET dochodzi jeszcze kompilacja typu „Any CPU”, co w konsekwencji może spowodować nie małe zamieszanie.... Przyjrzyjmy się może tym zagadnieniom. W niniejszych ro...
« Helper – czyli biblioteka pomocnicza w BizTalkDebugowanie biblioteki pomocniczej Posiadając opublikowaną aplikację na serwerze BizTalk, która wykorzystuje obiekty z biblioteki pomocniczej (Helpera), zachodzi czasem potrzeba przedebugowania oraz zweryfikowania poprawności ich działania. W tym celu, w Visual Studio, przechodzimy do kodu naszego Helpera i ustawiamy breakpoint na wybranym fragmencie kodu, po czym z menu Debug wybieramy Attach to Process. W oknie Attach to Process zaznaczamy pola: 1.Show pr...
W ostatnim poście pisałem o testach integracyjnych typu top-down. Dzisiaj przyszedł czas na podejście bottom-up. Będziemy analizować testowanie systemu przedstawionego w wprowadzeniu. W podejściu bottom-up tester zaczyna od najniższych modułów – tych najbardziej oddalonych od punktów wejściowych, przeważnie znajdujących się w dolnych warstwach systemu. Ogromną zaletą metody jest redukcja wymaganych do przeprowadzenia testu obiektów mock. Niestety w podejściu należy tworzyć własne sterowniki. Przykładowe ...
Mechanizmy wspierające tworzenie aplikacji wielowątkowych są obecne w .NET od zarania dziejów. Istnieją klasy opakowujące funkcje i obiekty systemowe, są także mechanizmy dostępne tylko w .NET i udostępnione w postaci wygodnych konstrukcji językowych. Jedną z takich konstrukcji obecnych w C# jest słowo kluczowe lock, które usprawnia synchronizację między wątkami praktycznie bez wpływu na wydajność. Lock przeszedł drobny lifting w wersji 4.0, jednak szczegóły omówimy na końcu. Metoda 1: Kod haszowy & ...
Gdy podczas debuggowania aplikacji chcemy ją zatrzymać w pewnym miejscu, zwykle ustawiamy „breakpoint”, aby jednak ten sposób zadziałał, musi być podłączony do procesu, który chcemy debuggować Debugger. Co można jednak zrobić, gdy tak nie jest (nie zawsze uda nam się ręcznie podłączyć (attach))? Gdy debugger nie jest podłączony do procesu, to można takie podłączenie wymusić dzięki wykorzystaniu klas z przestrzeni nazw System.Diagnostic: Debugger.Launch i Debugger.Break (http://msdn.microsoft.com/en-u...