Czy mieliście kiedyś tak, że pisaliście sobie aplikację desktopową, i w katalogu "Bin" tworzył wam się "mikroburdel" z milionem bibliotek DLL? Czy istnieje jakiś wmiarę prosty sposób na przeniesienie tychże do jakiegoś innego katalogu wewnątrz katalogu aplikacji, dajmy na to "Lib"?
Prawdopodobnie coś takiego: https://stackoverflow.com/questions/1373100/how-to-add-folder-to-assembly-search-path-at-runtime-in-net
Możesz też zawsze skorzystać z ILMerge i wyprodukować pojedynczy plik EXE, który będzie zawierał wszystkie biblioteki jeżeli ci to przeszkadza.
Niespecjalnie interesuje mnie, co się dzieje w bin
, więc tam nie zaglądam. W jakim celu chcesz tam cokolwiek przenosić gdzieś indziej?
Chodzi po prostu o to, że jeżeli wydaję aplikację jako portable, to nie chcę aby ludzie musieli przeklikiwać się przez wiele plików, po drugie... lubię pożądek.
- Można wczytywać bibliotekę dynamicznie podając ścieżkę i potem ją zwalniać.
- Możesz umieścić skrót do aplikacji na pulpicie
- Możesz zrobić skrypt uruchamiający aplikację która znajduje się w innym folderze razem z bibliotekami. Potencjalny użytkownik widzi tylko folder z bibliotekami i skrypt
- Możesz swoje dllki umieszczać w C://Windows
Myślałem, że dynamicznie mogę ładować tylko biblioteki niezarządzane. Jak ma się sprawa z normalnymi bibliotekami .NET?
Klasa Assembly
posiada metody do ładowania bibliotek.
Assembly.LoadFile() i już.
Ale najlepiej to skrzyżować z eventem AppDomain.AssemblyResolve dla lokalnej AppDomain, aby automatycznie ładować zależności.
Znalazłem rozwiązanie! Dla zainteresowanych:
https://docs.microsoft.com/en-us/dotnet/api/system.appdomainsetup.applicationbase?view=netcore-3.1