07/08/2011

Kłopoty z Client Profile

Home

The type or namespace name 'SomeType' does not exist in the namespace 'SomeNamespace' (are you missing an assembly reference?)

Sądzę, że każdy programista .NET spotkał się z powyższym błędem kompilacji. Nie jest to nic wyjątkowego i rozwiązanie problemu jest bardzo łatwe, wystarczy dodać do projektu referencję do brakującej biblioteki. Czy oby na pewno?

Kilka dni temu napotkałem powyższym błąd kompilatora i rozwiązanie problemu zajęło mi sporo więcej czasu niż normalne kilkanaście sekund. Na początku zdziwiłem się ponieważ niekompilujący się projekt aplikacji zawierał potrzebną referencję, kilka minut wcześniej sam ją dodałem. Na wszelki wypadek podpiąłem ją jednak jeszcze raz i przekompilowałem wszystkie potrzebne projekty ale nic to nie dało. Restart Visual Studio również nie pomógł. Kilka kolejnych prób kompilacji również spełzło na niczym.

Trochę zrezygnowany zabrałem się do przeglądania ustawień felernego projektu i zwróciłem uwagę na to, że korzysta on .NET Framework 4 Client Profile. Wcześniej nie miałem z tym problemu ale przypomniałem sobie, że w projektach tego typu nie można korzystać z bibliotek, których nie ma w NET Framework 4 Client Profile. Na próbę zmieniłem opcję Target framework na .NET Framework 4 i okazało się to strzałem w dziesiątkę.

W ramach testu zacząłem zmieniać różnym projektom opcję Target framework na .NET Framework 4 Client Profile i sprawdzać czy się kompilują. Okazało się, że prawie wszystkie skompilowały się bez żadnego problemu. Dalsze eksperymenty doprowadziły mnie do następującego wniosku:

Błąd zostanie zgłoszony jeśli w projekcie korzystającym z NET Framework 4 Client Profile użyjemy biblioteki, która bezpośrednio lub pośrednio korzysta z czegoś co nie znajduje się w NET Framework 4 Client Profile.

Przez użyjemy rozumiem np.: stworzenie instancji klasy. Samo dodanie referencji do biblioteki czy nawet zaimportowanie przestrzeni nazw przy pomocy using nie spowoduje błędu. Ważne jest również to, że biblioteka powodująca błąd może znajdować się gdzieś daleko w łańcuchu referencji, co jeszcze utrudnia sprawę. Należy również wiedzieć, że o przynależności lub nie do NET Framework 4 Client Profile nie decydują opcje kompilacji ale to z czego korzystamy w danej bibliotece. Listę "zabronionych" rzeczy można znaleźć tutaj. W moim przypadku błąd powodowała "zabroniona" biblioteka System.Data.OracleClient, z której korzysta Microsoft.Practices.EnterpriseLibrary.Data.dll, którą z kolei używam ja.

Sądzę, że warto o tym pamiętać aby zaoszczędzić sobie nerwów szczególnie, że kiedy dodajemy nowy projekt aplikacji (WPF, WinForms, konsola) to domyślnie będzie on korzystał .NET Framework 4 Client Profile. W większości przypadków jest to dla nas przezroczyste ale zawsze może trafić się ten jeden raz.

01/08/2011

Londyn - metro (trochę narzekania)

Home

Dzisiaj napiszę o metrze londyńskim, które należy do najstarszych i najbardziej rozbudowanych na świecie, a z którego w porównaniu do innych środków transportu korzystam najczęściej. Dwanaście linii wijących się pod miastem w porównaniu do jednej budowanej 25 lat w Warszawie robi wrażenie i budzi zazdrość. Ja chciałbym jednak pokazać, że jeśli choć na chwilę zapomnimy o liczbie linii to metro warszawskie zacznie wygrywać z londyńskim pod wieloma względami.

Zacznę od tego, że w londyńskim metrze jest bardzo duszno i gorąco. Nawet jeśli na dworze jest zimno i założyliśmy kurtkę to po zejściu do metra z pewnością ją zdejmiemy. Na przewarzającej liczbie stacji i w pociągach niestety brakuje klimatyzacji. Czytałem, że w najbliższym czasie na jednej z linii mają zostać wprowadzone pociągi z klimatyzacją ale to kropla w morzu potrzeb. Póki co przemieszczanie się metrem to przyjemnych nie należy, a zarząd metra zaleca aby w podróż wybrać się z butelką wody.

Komfortu nie poprawia fakt, że stacje w londyńskim metrze są bardzo małe, szczególnie te głębinowe. Jest akurat tyle miejsca aby zmieścił się pociąg i niewiele więcej. Biorąc pod uwagę to co widziałem, tak na oko przeciętna szerokość peronu to 3-4 metry. Pod tym względem Warszawa bije Londyn na głowę. Mniejsze są również wagony (z ciekawostek to na poszczególnych liniach mają różne rozmiary). W Warszawie bez problemu stoję wyprostowany, w Londynie mieszczę się po środku wagonu.

W londyńskim metrze brakuje również tzw. komór rozprężających powietrze. Powoduje to, że pociąg wjeżdżający na stację wpycha przed sobą ogromną masę powietrza, która uderza w pasażerów. Może to i drobiazg ale pokazuje, że metro w Warszawie należy do nowoczesnych. Potwierdza to, również fakt, że wszystkie stacje metra w Warszawie przystosowane są dla niepełnosprawnych (mam na myśli windy), a w Londynie nie.

Z innych rzeczy to jadąc metrem w Londynie mam wrażenie, że tory do najprostszych nie należą. Obserwując wagon jadący przed nami albo za nami można zauważyć jak nim rzuca, czasami jest jakby trochę wyżej, a czasami niżej :). Metro w Londynie jest również po prostu drugie, nawet biorąc pod uwagę wyższe zarobki. Koszt jednego przejazdy w ramach pierwsze strefy to na tą chwilę 1.9 funta szterlinga i to przy założeniu, że korzystamy z karty magnetycznej (tzw. Oyster). Tradycyjne bilety są jeszcze droższe.

Tyle narzekania. Ideałem byłoby metro nowoczesne jak w Warszawie ale z taką liczbą linii jak w Londynie (może moje wnuki tego doczekają). W kolejnych postach chciałbym dać kilka wskazówek jak korzystać z metra w Londynie.

Linki do poprzednich postów z serii na temat życia w Londynie:

29/07/2011

Londyn - kosze na śmieci

Home

Z ciekawostek. W Londynie jest bardzo mało koszy. W gruncie rzeczy jeśli mamy do wyrzucenia jakiś papierek, niedopałek papierosa itp. do mamy dwa wyjścia: schować do kieszeni lub wyrzucić na ulicę. Wiele osób, a w szczególności palacze wybierają drugą opcję. Służby sprzątające są jednak bardzo sprawne dlatego miasto nie jest zaśmiecone.

Ciekawe jest natomiast dlaczego tych koszy jest tak mało. Kolega stwierdził, że to pozostałość po czasach kiedy aktywna była Irlandzka Armia Republikańska. Kosz na śmieci to doskonałe miejsce na podłożenie bomby i dlatego usunięto je z ulic tylko, że potem "zapomniano" je przywrócić.

Linki do poprzednich postów z serii na temat życia w Londynie:

27/07/2011

IntelliTrace - Reaktywacja

Home

Już kawał czasu temu w artykule Używanie IntelliTrace poza Visual Studio 2010! opisałem w jaki sposób uruchomić narzędzie IntelliTrace poza środowiskiem Visual Studio 2010. Przedstawiona przeze mnie metoda miała jednak wadę. Log z nagranym przebiegiem wykonania programu zawierał "tylko" informację o wywołaniach metod czyli drzewo wywołań, a brakowało w nim informacji o zdarzeniach diagnostycznych czyli ważnych punkty w historii wykonania programu np.: wykonanie zapytania do bazy danych.

Ostatnio udało mi się znaleźć ostatni element układanki. Otóż aby log IntelliTrace zawierał wszystkie niezbędne informacje wystarczy wykonać, oprócz opisanych już przeze mnie rzeczy, jeszcze jeden krok czyli zmodyfikować plik CollectionPlan.xml z planem działania/konfiguracją narzędzia. Znajdujemy w nim linię:
...
<DiagnosticEventInstrumentation enabled="false">
...
i zamieniamy na:
...
<DiagnosticEventInstrumentation enabled="true">
...

22/07/2011

Londyn - przechodzenia przez ulicę

Home

W Polsce od maleńkiego uczono mnie, że przez ulicę należy przechodzić na pasach i kiedy pali się zielone światło. Swego czego przekonałem się również ile wynosi mandat za przechodzenie na czerwonym świetle:) Kiedy wyjeżdżam za granicę z założenia stosuję te same zasady, choćby dlatego, żeby nie płacić potencjalnie wyższych mandatów niż w Polsce.

W Londynie (nie wiem czy jest tak w całym Zjednoczonym Królestwie), co mnie bardzo zaskoczyło, sprawa ma się zupełnie inaczej. Zdecydowana większość osób przechodzi na czerwonym świetle i jest to właściwie zasadą. Początkowo miałem jednak pewne skrupuły. O tym, że jest to "dozwolone" przekonałem sie kiedy zobaczyłem, że policja nie reaguje na ten niecny proceder nawet jeśli przechodzi się na czerwonym świetle tuż koło właśnie ruszającego radiowozu!

Z czego wynika to przyzwolenie na łamanie prawa? Od kolegi dowiedziałem się, że wbrew pozorom wszystko dzieje się w majestacie prawa. Z ciekawości poszukałem informacji na ten temat i wygląda na to, że kolega miał rację. Otóż przepisy dotyczące przechodzenia przez jezdnię sformułowano przy użyciu wyrażeń "should/should not" albo "do/do not" (rada/zalecenie), a nie "must/must not" (zakaz/nakraz). Innymi słowy napisano, że "nie powinno" się przechodzić na czerwonym świetle zamiast, że "jest zabronione/nie wolno" przechodzić na czerwonym świetle.

Takie podejście do przechodzenia przez ulicę z pewnością przyspiesza poruszanie się po Londynie. Trzeba jednak pamiętać, że robimy to na swoją odpowiedzialność. Jeśli zostaniemy potrąceni przez samochód to będzie to nasza wina.

Linki do poprzednich postów z serii na temat życia w Londynie: