Dołączanie biblioteki DLL a inne biblioteki wykorzystane w tej bibliotece

0

Cześć,
mam być może głupie pytanie, ale pierwszy raz zrobiłem sobie bibliotekę dla swojej klasy, która sama wykorzystuje inne biblioteki (ściągnięte przez NuGet).
Tzn. utworzyłem bibliotekę w której ściągnąłem inne biblioteki/pakiety -> zrobiłem swoją klasę z metodami, którą chce wykorzystać w innym projekcie.

Następnie w innym projekcie chciałem wykorzystać tą swoją bibliotekę. Dodałem więc referencję do pliku DLL i wszystko się ładnie kompilowało. Jednak przy uruchomieniu programu (asp.net core) wywaliło mi wyjątek związany z bibliotekami, które wykorzystałem w swojej DLL-ce.
Gdy je zaimportowałem również do drugiego projektu program się normalnie uruchomił i działa.

Mam więc pytanie czy jest możliwe takie stworzenie biblioteki DLL, by w niej załadować wszystkie potrzebne pakiety/biblioteki -> stworzyć klasy etc. a następnie dołączyć tylko tą jedną bibliotekę (bez ściągania po raz kolejny pakietów, które są wykorzystywane w tej dołączonej bibliotece)?

1

Zatem tak. Jeśli chcesz pozbyć się dll'ki zewnętrznie i chciałbyś ją wbudować w inną dll'ke (co wydaje mi się, że chcesz zrobić), to masz dwie opcje. Albo podłączysz obie pod swoją aplikację, albo jedną pod drugą (nie wiem, czy w tym przypadku moja opcja zadziała). Anyway:

  1. Dodaj dll'ki jako reference, oraz dodaj samą dll do projektu. W Properties pliku, ustaw Build Action na Embedded Resource oraz Copy to Output Directory na Do not copy.
  2. Na początku dll'ki (o ile zadziała)/appki dodajesz kod:
			AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
			{
				string resourceName = new AssemblyName(args.Name).Name + ".dll";
				string resource = Array.Find(this.GetType().Assembly.GetManifestResourceNames(), element => element.EndsWith(resourceName));

				if(resource != null)
				{
					using(var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resource))
					{
						Byte[] assemblyData = new Byte[stream.Length];
						stream.Read(assemblyData, 0, assemblyData.Length);
						return Assembly.Load(assemblyData);
					}
				}
				return null;
			};

I to w sumie tyle. Daj znać czy gai.

1 użytkowników online, w tym zalogowanych: 0, gości: 1