Visual Studio 2015 i upgrade projektu za każdym razem

Visual Studio 2015 jest już od jakiegoś czasu. Instalacja, odpalenie projektu i do przodu. Coś tam się zaktualizowało w projekcie i mogę dalej pracować z nowymi zabawkami. Problem jaki mi się pojawił to w jednym solution ze sporą ilością projektów jeden z nich aktualizował się przy każdym otwarciu projektu.

Projekt, który chciał się aktualizować przy każdym otwarciu Visual Studio to MVC3, który później był migrowany do MVC4. Przy każdym otwarciu upgrade i kopia wszystkich plików i raport w html-u. Zanim na to zwróciłem uwagę, wrzuciłem całkiem sporo gnoju do repozytorium. Poszukując rozwiązania okazało się, że w trefnym pliku csproj wystarczy usunąć:

<FileUpgradeFlags>40</FileUpgradeFlags>
<UpgradeBackupLocation>Upgrade20</UpgradeBackupLocation>
<OldToolsVersion>4.0</OldToolsVersion>

Pozostało jeszcze wywalenie gnoju z repo i już można pracować jak człowiek.

Debuggowanie – Make Object ID

Czasem zwykłe metody debugowania nie wystarczają, czasem watch-e i sprawdzanie krok po kroku jest nie wystarczające. Czasem chciało by się sprawdzić wartość obiektu, do którego nie mamy referencji. No właśnie, wszystkie normalne narzędzia debuggowania jakie udostęnia Visual Studio pozwalają na oglądanie wszystkiego co mamy w zasięgu referencji albo gdzieś po callstack-u możemy się do “tego” dorwać. Co jednak jeśli i to za mało? Na pomoc Make Object ID. Zatrzymując program w momencie gdy mamy dostęp do rzeczonego obiektu (new NaszPodgladanyObject ??) wystarczy utworzyć sobie referencję 🙂

vsObjectId

Po dodaniu watch-a wystarczy z menu context-owego wybrać Make Object ID, co powoduje dodanie numerka do obiektu – takiego 1# (kolejna będzie 2#, 3# etc). Teraz możemy w watch-u oglądać obiekt 1#, co więcej przez całe życie programu ten obiekt będzie dostępny przez 1#, co więcej 1# możemy używać również w moim ulubionym immediate window Uśmiech

Debugowanie w Visual Studio

Ostatnio widzę dużo wpisów na temat debugowania aplikacji. Nie trafiłem jednak na opis dwóch rzeczy, które bardzo tą czynność ułatwiają, mianowicie, zmiana kolejności wykonywania kodu oraz GetHashCode()

Zmiana kolejności wykonywania kodu

Czy zdarzyło Ci się podczas debugowania przejechać o tą jedną linijkę za daleko? Nic prostszego, chwyć żółtą strzałkę i przesuń kilka linijek do tyłu i wykonaj kod jeszcze raz. To jest tak proste, że aż niebywałe, że niektórzy o tym nie wiedzą. Teraz już wiecie.

vsdebugger.gif

Możemy przesuwać się na początek i na koniec funkcji, do przodu i do tyłu. Krok dalej to w przypadku wyjątku, który zatrzymał nam program, możemy przenieść się na koniec funkcji, wyjść z niej, cofnąć się linijkę do góry (w kawałku kodu, który tą funkcję wywołał) i wywołać jeszcze raz, próbując zrozumieć dlaczego program “się sypnął”. Dzięki czemu nie trzeba restartować aplikacji i przeklikiwać się. Rozwinięciem tego jest możliwość edycji kodu w trakcie debugowania. Szczęśliwcy z VS2008 (bodajże) na maszynach 32bit mogą to robić od dawna. Jeśli używacie x64 to dopiero VS2013 pozwala modyfikować kod w locie. Świetna sprawa, oszczędza sporo czasu (chociaż ma swoje ograniczenia).

GetHashCode()

GetHashCode to funkcja, któraz zwraca nam unikalny (teoretycznie) identyfikator obiektu. Do czego to może być przydatne przy debugowaniu? Ano czasem jest tak, że kod robi coś dziwnego i za bardzo nie wiadomo dlaczego, bo niby jest ok ale działa dziwacznie. I jak już wszystko zawiedzie, to okazuje się, że warto sprawdzać Hash obiektów, bo może się okazać, że w jednej części aplikacji mamy jeden obiekt a w innej części drugi obiekt mimo tego, że myślimy, że to ten sam. Sam więcej niż raz wpadłem w taką pułapkę, że myślałem, że mam do czynienia z  jakimś obiektem danej klasy, a okazywało się, że gdzieś po drodze się podpinała inna instancja i tak naprawdę miałem te same dane ale inne referencje wewnątrz i koniec końców program działał trochę inaczej. Mi najwygodniej użyć do tego Immediate Window (ALT+CTRL+I) i po prostu klepię ?  nazwaZmiennej.GetHashCode(). Proste jak budowa cepa a bardzo skuteczne, zadziwiająco skuteczne.

Dając Ci te dwa (nowe) narzędzia, życzę owocnych łowów.

Małe litery w menu głównym Visual Studio 2012

Jest już nowe Visual Studio – chyba każdy o tym wie. Pierwsza rzecz, od której bolą (mnie) zęby to duże litery w menu. To tak jak by Visual cały czas na mnie krzyczął. Więc jeśli nie podoba Ci się default:

image

I wolisz tak:

image

To wystarczy dodać w rejestrze:

HKCU\Software\Microsoft\VisualStudio\11.0\General\

SuppressUppercaseConversion DWord o wartości 1

Link do odpowiedniego Connect-a, może zmienią to do RTM-a

http://connect.microsoft.com/VisualStudio/feedback/details/745676/capital-uppercase-menus

Warsztat czyli moje narzędzia pracy

Każdy programista ma swoją listę ulubionych narzędzi – takich jakie sprawdzają się w codziennej pracy. Warto poznać czego używają inni dlatego zachęcam do opisania swojego. Poniżej mój warsztat (na dzień dzisiejszy), który wygląda następująco (w kolejności zwiększenia komfortu pracy i produktywności):

NCrunch

dodatek do Visual Studio do Continious Testing. Dodatek ten dział w tle i jeśli tylko może, to kompiluje kod i uruchamia testy jednostkowe. Efekt jest taki, że przestając pisać nawet na kilka sekund, kod zostanie skompilowany, testy uruchomione a ładny pasek postępu powie czy wszystko jest ok czy nie. Dodatkowo w najnowszej wersji pokazuje powolne linie kodu, więc spełnia funkcję podstawowego profilera. U mnie ten dodatek zajmuje niekwestionowane pierwsze miejsce. http://www.ncrunch.net/

ReSharper

na drugim miejscu z bardzo małą stratą punktową (ale jednak) jest ReSharper. Świetny dodatek ułatwiający pracę z kodem. Pozwala na super szybką nawigację, wyszukiwanie problemów z kodem, zawiera potężne refaktoryzacje oraz wiele innych. Lubi RAM ale odpłaca się po stokroć za każdy zużyty MB http://www.jetbrains.com/resharper/ (z tej samej stajni sprawdziłem Intelij dla Javy i PhpStorm – równie świetne a z PhpStormem dochodzę do wniosku że php może być używalny Puszczam oczko )

FluentAssertions

to mała sprytna biblioteka, która powoduje że asercje są (dla mnie) czytelniejsze. Działą z MBUnitem i NUnitem oraz podobno z innymi xUnitami – ale innych nie sprawdzałem.http://fluentassertions.codeplex.com/

Mercurial

w wojnie na DVCS-y pomiędzy Mercurial-em a Git-em stoję po stronie Mercurial-a. Głównie dlatego że BitBucket daje możliwość założenia prywatnego konta za free. Niestety muszę również pracować z SVNem – a przecież złe repozytorium boli całe życie.

Personal Activity Monitor

Przerażający program, który liczy czas jaki spędzamy z poszczególnymi aplikacjami. Praktycznie zerowa konfiguracja i prosto prezentowane informacje najwyraźniej mają dla wielu znaczenie bo program ten pobrano już ponad 6000 razy. Program ten rozwijam w wolnym czasie  – tak to jest autoreklama. http://activitymonitor.codeplex.com/

NuGet

ostatnia zabawka, która ostatnio pochłania mnie bez reszty to NuGet. Dodawanie referencji za jego pomocą jest nieprzyzwoicie proste jednak dopiero odkrycie, że w miarę łatwo można stworzyć własne pakiety i własne repozytorium przekonało mnie, żeby spoglądnąć na niego z większą uwagą. http://nuget.org/

Gdzieś pomiędzy lub obok majaczą jeszcze: SkyDrive, FinalBuilder, SpecFlow, Evernote, GoogleCalendar i RocketDock. Używam ich jednak znacząco mniej.