Praca z wieloma wersjami .Net Core

Wypuszczona niedawno nowa wersja .Net Core ( w moim przypadku jest to wersja 2.1.302) wprowadziła kilka zmian, przez które migracja naszych projektów z wersji 2.0 do 2.1 jest dosyć ciężka, zwłaszcza, jeśli mamy wiele projektów w wersji 2.0. Jednak od zainstalowania nowszej wersji, dotnet cli korzysta domyślnie z najnowszej, przez co niektóre komendy mogą wyrzucać błędy lub niepotrzebne ostrzeżenia. Jak sobie z tym poradzić?

Z pomocą przychodzą nam pliki global.json. Są to pliki, które zawierają w sobie wersję .Net Core, której dotnet cli ma używać w danym katalogu oraz we wszystkich podkatalogach. Tworzy się go bardzo prosto:

dotnet new globaljson --sdk-version [version]

gdzie zamiast [version] wpisujemy po prostu numer wersji, która ma być używana. Wygenerowany plik wygląda następująco:

{
  "sdk": {
    "version": "2.0.0"
  }
}

Wypróbujmy to: stworzyłem dwa katalogi, jeden o nazwie 2.0 oraz jeden o nazwie 2.1, w każdym z nich znajduje się plik global.json z odpowiednią wersją:
Screen Shot 2018-07-29 at 22.51.50
Jak widać na załączonym obrazku, mam zainstalowane dwie wersje .Net Core: 2.0.0 oraz 2.1.302. Uruchomiona w każdym folderze komenda

dotnet --version

wskazuje dokładnie tę samą wersję .Net Core, która znajduje się w pliku.

Moim zdaniem warto umieszczać pliki global.json w folderze z naszymi projektami. Dlaczego? Ponieważ podnoszenie wersji frameworka, w tym przypadku .Net Core, może być czasem bardzo bolesne i raczej chcielibyśmy tego uniknąć w przypadku bardzo dużych projektów. Jest to przydatne zwłaszcza w przypadku budowania naszych projektów na jakimś serwerze (teamcity, jenkins) ponieważ jesteśmy pewni, że do budowania i wystawiania naszego projektu na świat została użyta dokładnie ta wersja, którą chcieliśmy użyć.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s