Lepsze wrogiem dobrego czyli sam się prosisz o kłopoty

Czasami mam takie dni, że mam dość. Wszystko się sypie a ja sam nie wiem w co włożyć ręce (szczególnie jak przestaje działać coś na czym polegam od dłuższego czasu i coś co do tej pory nie sprawiało mi żadnych problemów).
Pewnego pięknego poniedziałkowego ranka przychodzę do pracy i od progu słyszę, że po tym jak w piątek zrobiłem pusha to kod przestał się kompilować. Wprost “uwielbiam” takie rozpoczęcie tygodnia. Oczywiście jestem przekonany, że kod działa, ale jestem przecież tylko człowiekiem. Z ciężkim sercem odpalam więc Visual Studio, wybieram projekt, naciskam F6 (chwila stresu) i jest Build Succedded. Co nie zmienia faktu, że na drugim stanowisku mamy Build Failed. W piątek m.in dołożyłem Automappera do projektu (jak ktoś jeszcze nie zna tej biblioteki to polecam opis u Maćka Aniserowicza). Kod z piątku (w bardzo dużym uproszczeniu) wyglądał tak:

using AutoMapper;
using System;

namespace ConsoleApplication
{
    class Program
    {
        static void Main()
        {
            Mapper.CreateMap<Person, PersonDTO>();
            var client = new Person { FirstName = "John", LastName = "Doe" };
            var dtoClient = Mapper.Map<Person, PersonDTO>(client);
            Console.WriteLine(string.Format("{0} {1}", dtoClient.FirstName, dtoClient.LastName));
        }
    }

    class Person
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        
        //tutaj jakaś logika
    }

    class PersonDTO
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
}

Kod prosty jak konstrukcja cepa. A mimo to się nie kompiluje. To znaczy mi się kompiluje a na drugim stanowisku nie. Bardzo dziwne. Muszę się temu przyjrzeć. Najpierw opis błędu

Invalid static method invocation syntax: "[MSBuild]::MakeRelative($(MSBuildProjectDirectory), C:\Repository\Sample2014,08,06\packages\AutoMapper.3.2.1\lib\net40\AutoMapper.Net4.dll)".
Method '[MSBuild]::MakeRelative' not found. Static method invocation should be of the form: $([FullTypeName]::Method()), e.g. $([System.IO.Path]::Combine(`a`, `b`)).

Czyli ewidentnie Automapper coś narozrabiał(pierwsza myśl).

Ja: Cofnij się do poprzedniej wersji.
X: Ok.
Kilka kliknięć myszką i mamy odpaloną nową instancję VS z kodem sprzed pusha, ale również z Automapperem tylko tym razem się buildującą. WTF!? (I wtedy chyba zaczęła działać poranna kawa)
Ja: Dlaczego nie użyłeś Gita aby się cofnąć do wcześniejszej wersji?
X: A co to za różnica? Po co się uczyć tych wszystkich komend. Mam robione kopie dzienne i to jest lepsze rozwiązanie bo jak sam widzisz takie kopie są bezpieczniejsze niż ten twój cały Git.
Przyglądam się jeszcze raz opisowi błędu.
Ja: Na przyszłość nie używaj przecinków w ścieżce (i naucz się obsługi Gita).

7 thoughts on “Lepsze wrogiem dobrego czyli sam się prosisz o kłopoty

  1. Pingback: dotnetomaniak.pl
  2. Z czystej przekorności zapytam, czy to właśnie przecinki są tym lepszym dobrem i lepiej ich nie stosować? 🙂

    1. Przecinki + własny sposób kontroli wersji (oparty na kopiach dziennych)

    1. Tylko, że kod się zbudował a problem powstał w wyniku pracy na kopi. Gdyby wszystko odbywalo się w folderze pod kontrolą gita nie byłoby problemów

  3. Nie trzeba się uczyć żadnych komend git-a. Wystarczy zainstalować plugin do VS albo używać nowego 2013 który ma integrację wbudowaną …

    1. Oczywiście jest plugin do VS a VS2013 ma wbudowaną integrację i to powinno wystarczyć. Choć ja osobiście preferuję konsole.

Comments are closed.