ResourceUtils.cs 1.1 KB

12345678910111213141516171819202122232425262728293031323334
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Reflection;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. namespace Ips.Library.Basic
  9. {
  10. public static class ResourceUtils
  11. {
  12. public static void LoadDllFromResource()
  13. {
  14. AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => LoadFromResource(args.Name);
  15. }
  16. private static Assembly LoadFromResource(string argsName)
  17. {
  18. string dllName = new AssemblyName(argsName).Name + ".dll";
  19. var assem = Assembly.GetCallingAssembly();
  20. var resourceName = assem.GetManifestResourceNames().FirstOrDefault(rn => rn.EndsWith(dllName));
  21. if (resourceName == null) return null; // 没找到程序集。
  22. using (Stream stream = assem.GetManifestResourceStream(resourceName))
  23. {
  24. byte[] assemblyData = new byte[stream.Length];
  25. stream.Read(assemblyData, 0, assemblyData.Length);
  26. return Assembly.Load(assemblyData);
  27. }
  28. }
  29. }
  30. }