Ostatnio spotkałem się z pytaniem: “Jak kompiluję projekt to VisualStudio pyta się czy zmienić plik moja_klasa.g.cs. Wszędzie go szukałem ale nie znalazłem. Co to &#@!* jest?”

Szybko więc odpowiadam, ale zacznijmy od małego wstępu 🙂

Pisząc aplikacje, wykorzystując WPF tworzymy między innymi widoki, które definiuje XAML. Tworząc nowe okno, UserControl czy bądź cokolwiek innego VisualStudio stworzy nam 2 pliki jeden z nich to nowy_widok.xaml oraz nowy_widok.xaml.cs.

Podczas kompilacj naszego projektu w katalogu wyjściowym VisualStudio tworzy 2 katalogi obj i bin.

W katalogu obj\Debug.. \Release.. ? znajduje się właśnie ten dziwny plik z rozszerzeniem g.cs. Czym on jest?

W tym samym katalogu można zauważyć pliki z rozszerzeniem baml. Są to dokładnie nasze “widoki i inne xamlowe cosie” zapisane binarnie (zserializowane). Dzięki temu nasze widoki wczytywane są o wiele szybciej. To tak w wielkim skrócie 🙂

Lecz czym jest …g.cs?

Jest to klasa generowana automatycznie, która zawiera w sobie:

  • poszczególne pola dla wszystkich kontrolek, które są zawarte w widoku
  • kod, który ładuje BAML’a z określonego assembly
  • wszystkie handlery i tego typu rzeczy, które dotyczą naszych kontrolek wykorzystywanych w widoku

Przykład:

 

Więc każda zmiana w XAML spowoduje, że VisualStudio (jeżeli macie otwarty plik …g.cs) podczas kompilacji poinformuje nas o zmianach w tym pliku.

Czym jest samo “g“? 😀

Sam nie wiedziałem. Podobno jest to skrót od generated 😉