Mam projekt pomocnika, którego używam we wszystkich tworzonych przeze mnie aplikacjach. Zawiera kilka metod rozszerzenia i kilka ogólnych klas pomocników, kontroli itp. Od czasu do czasu aktualizuję / rozszerzam projekt pomocnika. Są to zwykle małe i niepowiązane ze sobą projekty, a ja jestem jedyną osobą, która nad nimi pracuje.
Wypróbowałem dwa podejścia do korzystania z niego
- dodaj pliki .cs bezpośrednio (Dodaj jako link) do każdego projektu, w którym ich używam
- skompiluj go jako .dll i dodaj jako odniesienie
Widzę pewne zalety i wady tych podejść.
Pierwszy:
- jest prostsze, ponieważ klasy pomocnicze są kompilowane do pliku exe, dlatego często bardzo łatwo mogę dostarczyć tylko jeden plik .exe, który będzie działał dobrze. Ponieważ dodaję jako łącze, mogę być całkiem pewien, że za każdym razem, gdy buduję projekt korzystający z pomocnika, pliki pomocnika będą najnowszą wersją.
- jest jeszcze prostsze, ponieważ mogę oddzielić pliki, dzięki czemu do moich metod rozszerzenia, które działają dobrze w .NET 4.0, można się odwoływać oddzielnie od tych, które wymagają .NET 4.5, co oznacza, że aplikacja jako całość może działać w .NET 4.0
- Umożliwia debugowanie za pomocą kodu, ze wszystkimi zaletami punktów przerwania itp. Itp.
- nie wydaje się być „najlepszą praktyką”
Drugie:
- wydaje się być właściwym podejściem, ale:
- wymaga ode mnie dostarczenia osobnego pliku .dll, który z jakiegoś powodu jest znacznie trudniejszy dla użytkowników (zwykle udostępniają moje programy bez pliku .dll, który następnie ulega awarii podczas uruchamiania)
- ponieważ zostanie skompilowany w pojedynczą bibliotekę .dll, będzie wymagał najwyższej wersji .NET - wielu moich użytkowników nie ma .NET 4.5 i wymagają tego tylko niektóre elementy mojej klasy pomocniczej, co oznacza, że mogę zmusić niektóre osoby aktualizować swoje systemy bez powodu
- Muszę również upewnić się, że za każdym razem, gdy aktualizuję którykolwiek z moich programów, dostarczam również plik .dll - nawet jeśli nie wiem, czy został zmieniony od ostatniej wersji, czy nie (mógł być, ale był równie dobrze może być ta sama wersja). Nie widzę prostego sposobu na określenie tego, bez śledzenia wersji zestawu, co jest dodatkową pracą. Na razie, kiedy aktualizuję swoje programy, dostarczam tylko zaktualizowane pliki exe i lubię, aby były małe i niskie.
Jaka jest zatem faktyczna korzyść z używania pliku .dll tutaj? Pamiętaj, że jestem jedyną osobą edytującą kod wszystkich aplikacji i plików pomocniczych.
Ponadto, aby wyjaśnić - aplikacje są zwykle bardzo małe, podczas gdy kod zawarty w klasach pomocniczych jest całkowicie ogólny dla nich wszystkich (niektóre proste porównania ciągów, ścieżki lub operacje XML itp.)
Właściwie ktoś mi uświadomił, że istnieje trzecia opcja. Ponieważ mam kod pomocniczy w projekcie separte, mogę dodać ten projekt do rozwiązań każdej z moich oddzielnych aplikacji - co działa jak „Dodaj jako łącze” dla pojedynczych plików, z tym wyjątkiem, że dodam tylko jeden projekt ... Ale jak zauważył Doc Brown, oznacza to zasadniczo, że .dll i tak będzie musiał zostać dodany do projektu ...
Kolejną rzeczą, która przemawia za nieużywaniem plików dll, jest możliwość aktywnego debugowania przez klasę pomocnika ...