| Termin | Definicja |
|---|---|
| Konflikt AppContext.BaseDirectory w aplikacjach wieloplatformowych | Konflikt AppContext.BaseDirectory w aplikacjach wieloplatformowych .NET wskazuje na różnicę w ścieżce bazowej między środowiskiem Windows a Linux/macOS, wymagającą kodu niezależnego od platformy. Czym jest konflikt AppContext.BaseDirectory w aplikacjach wieloplatformowychKonflikt Problem może pozostać niewidoczny podczas pracy w środowisku deweloperskim, a ujawnić się dopiero po opublikowaniu aplikacji, uruchomieniu jej z poziomu usługi, kontenera lub narzędzia automatyzującego. W takiej sytuacji odwołanie do zasobu zapisane jako Znaczenie ma również sposób publikacji. Inaczej zachowuje się aplikacja uruchamiana bezpośrednio z katalogu wynikowego, inaczej wersja wdrożona jako pojedynczy plik, a jeszcze inaczej program korzystający z zasobów osadzonych w assembly. W przypadku bibliotek zależnych od lokalizacji plików trzeba dodatkowo rozróżnić katalog aplikacji od katalogu biblioteki, która wykonuje dane odwołanie. Prawidłowe rozwiązanie powinno więc wynikać z przeznaczenia zasobu, a nie z przypadkowej obserwacji jednej konfiguracji. Kontekst techniczny i porównanie sposobów ustalania ścieżki
W projektach ASP.NET Core często występuje jeszcze katalog treści aplikacji udostępniany przez mechanizmy hostingu. Jest on przeznaczony do zasobów takich jak szablony, pliki konfiguracyjne, materiały statyczne czy inne elementy wdrożenia. W aplikacji bibliotecznej może natomiast właściwe być użycie lokalizacji assembly, zasobu osadzonego w projekcie albo jawnie przekazanej ścieżki konfiguracyjnej. Każde z tych rozwiązań opisuje inną relację między kodem a plikiem, dlatego zastępowanie wszystkich odwołań jednym globalnym sposobem często prowadzi do kolejnych niezgodności. Różnice platformowe dotyczą nie tylko samego katalogu bazowego. Systemy mogą odmiennie traktować wielkość liter w nazwach, separator katalogów, uprawnienia do zapisu, dowiązania, znaki specjalne oraz format ścieżki. Bezpieczne budowanie lokalizacji powinno odbywać się za pomocą Najbardziej przewidywalny model zakłada rozdzielenie zasobów niezmiennych od danych generowanych podczas działania programu. Pliki dostarczane razem z aplikacją można wiązać z katalogiem wdrożenia albo umieszczać jako zasoby osadzone. Dane tworzone przez aplikację powinny mieć lokalizację ustalaną przez konfigurację, środowisko uruchomieniowe lub właściwy katalog danych. Dzięki temu zmiana katalogu startowego nie zmienia przypadkowo miejsca zapisu ustawień, dzienników i plików roboczych. Typowe problemy i błędy prowadzące do niezgodności - Konflikt AppContext.BaseDirectory w aplikacjach wieloplatforCzęstym błędem jest założenie, że katalog projektu będzie istniał również po publikacji. W środowisku programistycznym plik może być odnajdywany dzięki strukturze źródeł albo właściwościom projektu, natomiast po wdrożeniu może nie zostać skopiowany do katalogu wyjściowego. Wtedy Inny przypadek dotyczy mieszania ścieżek względnych z absolutnymi. Ścieżka względna jest interpretowana względem bieżącego katalogu procesu, a niekoniecznie względem Problemy powoduje również niejawne założenie dotyczące wielkości liter. Nazwa pliku zapisana w kodzie może działać w jednym środowisku, a w innym nie odpowiadać rzeczywistej nazwie na dysku. Podobnie kłopotliwe bywają znaki diakrytyczne, spacje, końcowe separatory i ścieżki zawierające nietypowe znaki. Weryfikacja powinna obejmować nie tylko wartość ścieżki, lecz także faktyczną obecność pliku, możliwość jego odczytu oraz uprawnienia procesu. Do diagnostyki warto rejestrować pełną, znormalizowaną ścieżkę, wartość bieżącego katalogu, katalog bazowy aplikacji, nazwę środowiska uruchomieniowego oraz sposób publikacji. Nie powinno się jednak bezrefleksyjnie ujawniać takich danych użytkownikowi końcowemu, ponieważ ścieżki mogą zawierać informacje o strukturze systemu. W kodzie produkcyjnym należy rozważyć obsługę wyjątków Naprawa polega najczęściej na ujednoliceniu strategii lokalizowania zasobów, usunięciu niejawnych ścieżek względnych, poprawieniu procesu publikacji oraz oddzieleniu plików tylko do odczytu od danych zapisywanych przez aplikację. Jeżeli zasób jest częścią biblioteki, należy ustalić, czy powinien być osadzony, kopiowany przy publikacji, czy przekazywany do biblioteki przez konfigurację. Testy powinny być wykonywane z różnych katalogów startowych i na docelowych systemach, ponieważ uruchomienie z katalogu projektu nie odtwarza wszystkich warunków wdrożenia. Kiedy trzeba przekazać urządzenie do naprawy - Konflikt AppContext.BaseDirectory w aplikacjach wieloplatforDo serwisu warto zgłosić problem, gdy aplikacja .NET przestaje odnajdywać konfigurację, szablony, biblioteki lub inne pliki po zmianie systemu, sposobu publikacji albo metody uruchamiania. Szczególnie pomocna może być konsultacja, gdy program działa poprawnie w edytorze, lecz nie uruchamia się jako aplikacja opublikowana, po przeniesieniu na inny komputer albo przy starcie z poziomu skrótu czy usługi. Przed przekazaniem urządzenia można przygotować treść komunikatu błędu, sposób uruchomienia, wersję środowiska .NET oraz informację, czy problem dotyczy jednego pliku, czy całego zestawu zasobów. W ramach sprawdzenia można przeanalizować strukturę katalogów po publikacji, ustawienia kopiowania plików, uprawnienia konta uruchamiającego program oraz różnice między katalogiem bieżącym a katalogiem bazowym. Następnie można uporządkować konfigurację, wskazać właściwą lokalizację danych i zweryfikować działanie aplikacji po ponownym uruchomieniu. Takie podejście pozwala odróżnić błąd ścieżki od braku pliku, niewłaściwych uprawnień albo niezgodności sposobu publikacji. Warszawskie Pogotowie Komputerowe 24/7 przyjmuje zgłoszenia dotyczące problemów z laptopami i komputerami PC, w tym sytuacji, w których błędne ścieżki, nieprawidłowa konfiguracja środowiska lub nieudane wdrożenie uniemożliwiają pracę z aplikacją. Naprawy trwają z reguły do 3 dni roboczych, zależnie od zakresu diagnostyki i dostępności urządzenia. |