Revit 2025 wprowadza dużą zmianę w API: przejście z .NET Framework do .NET. W związku z tym, Revitowe wtyczki (addiny, pluginy) muszą zostać zaktualizowane do .NET 8.
Mamy do dyspozycji kilka oficjalnych pomocy w związku z tą migracją:
- Autodesk Desktop API Updates: .NET Core 8.0 Migration | Webinar recording
- Migrating from .NET 4.8 to .NET 8 on the Building Coder blog
Jednak podczas aktualizacji moich wtyczek, napotkałem kilka dodatkowych problemów. Postanowiłem więc opisać mój proces migracji.
Ten post to poradnik krok po kroku aktualizacji wtyczek utworzonych dla poprzednich wersji Revita (wykorzystujących .NET Framework), by były kompatybilne z Revitem 2025 (wykorzystującym .NET 8).
Krok 1. Zapisz obecną wersję
Aktualizacja to duża zmiana w projekcie. Dobrym pomysłem jest zapisanie stanu przed aktualizacją używając systemów kontroli wersji i/lub skopiowanie plików projektów.
Krok 2. Dodaj odniesienia do nowych bibliotek (DLL) Revita
Jak zawsze podczas aktualizacji wtyczek do nowszych wersji Revita, musimy dodać referencje do nowych wersji bibliotek (DLL) Revita (np. RevtiAPI.dll).
W moich projektach nie dodaję odniesień bezpośrednio z folderu instalacyjnego Revita, ale tworzę w projekcie osobny folder, do którego kopiuje potrzebne biblioteki. Podczas aktualizacji muszę więc podmienić starsze wersje bibliotek na nowsze jedynie w tym folderze. Jeśli w twoich projektach odnosisz się bezpośrednio do folderu instalacyjnego, zamień referencje w projektach.
Zmiana odniesień do zewnętrznych bibliotek w tym kroku, przed aktualizacją, pozwoli na uniknięcie dodatkowych błędów.
Krok 3. Pobierz i zainstaluj .NET Upgrade Assistant w Visual Studio
.NET Upgrade Assistant bardzo ułatwia proces migracji. Użyjemy go w kolejnym kroku.
Krok 4. Aktualizacja projektów (zaczynając od dolnego poziomu hierarchii zależności projektów)
Teraz użyjemy opcji "upgrade" .NET Upgrade Assistant na naszych projektach.
Musisz zaktualizować wszystkie projekty oparte na .NET Framework, gdyż .NET Framework nie jest kompatybilny z .NET. Jeśli twoja solucja (Solution) zawiera projekty oparte o .NET Standard, nie muszą być one aktualizowane, gdyż .NET Standard jest kompatybilny .NET.
Jeśli twoja solucja zawiera więcej niż jeden projekt do aktualizacji, powinny być one aktualizowane w odpowiedniej kolejności - zaczynając od dolnego poziomu hierarchii zależności projektów. Oznacza to, że powinieneś zacząć od projektu nie odnoszącego się do innych projektów w solucji.
Przykład: Mamy Projekt A, Projekt B i Projekt C. Projekt A nie odnosi się do innych projektów w solucji. Projekt B ma referencję do Projektu A, a Projekt C do projektu B. Powinieneś więc zacząć od Projektu A, następnie Projekt B, a na koniec Projekt C.
Ta zasada ma zastosowanie również w przypadku projektów z testami - jako że zapewne odnoszą się one do innych projektów, zaktualizuj je po "zwykłych" projektach.
Kliknij na projekt i wybierz Upgrade.
Wybierz Upgrade project to a newer .NET version.
(To okno nie zawsze się pojawia.)
Wybierz .NET 8.0.
W następnym oknie, wybierz wszystkie komponenty (jeśli domyślnie nie będą wybrane), i kliknij Upgrade Selection.
Po aktualizacji, kliknij na projekt by otworzyć plik .csproj..
Powinien on zawierać taki wiersz:
<TargetFramework>net8.0</TargetFramework>
Dodaj "-windows", aby wiersz wyglądał tak:
<TargetFramework>net8.0-windows</TargetFramework>
Jeśli aktualizujesz projekt WPF, jego .csproj powinien zawierać:
<UseWPF>true</UseWPF>
A jeśli Windows Forms:
<UseWindowsForms>true</UseWindowsForms>
Powtórz te kroki dla wszystkich twoich projektów, podążając w górę hierarchii zależności projektów.
Krok 5: Manifest
Kopiowanie pliku manifestu (.addin) do folderu wtyczek nowej wersji Revita to typowy krok przy aktualizacji.
ALE w tym przypadku mamy drobny haczyk związany z migracją do .NET: ścieżka pliku Assembly musi zostać zmieniona w związku z dodatkowym folderem tworzonym podczas kompilowania projektów.
Przykładowo:
<Assembly>c:\MyRevitProject\bin\Debug\RevitProject.dll</Assembly>
Musi być zamienione na:
<Assembly>c:\ MyRevitProject\bin\Debug\net8.0-windows\RevitProject.dll</Assembly>
Krok 6: Dodatkowe zmiany wynikające z migracji
Migracja może spowodować błędy w kodzie, jak również w odniesieniach do zewnętrznych bibliotek. Błędy te mogą być różne w zależności od użytych paczek i samego kodu.
Po ich naprawieniu, solucja może zostać przebudowana i wtyczka powinna działać w Revicie 2025.
Na marginesie: Istnieje bardziej skomplikowana opcja: utworzenie jednej solucji tak, by była kompatybilna z różnymi wersjami Revita. Może być to pomocne gdy wtyczka musi być utrzymywana również dla poprzednich wersji. Niemniej, jest mało prawdopodobne, by następne wersje Revita wróciły do .NET framework.