Использование DLL из ресурсов - C#

Узнай цену своей работы

Формулировка задачи:

Для работы приложения необходимо что бы DLL файл лежал рядом с ним, можно ли как то добавить DLL в ресурсы что бы он использовал его (всё в 1 файле .exe) Это возможно сделать?

Решение задачи: «Использование DLL из ресурсов»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Net;
  5. using System.Text;
  6. using System.Reflection;
  7. using test.Properties;
  8.  
  9. namespace test
  10. {
  11.     class Program
  12.     {
  13.  
  14.  
  15.             private static void Main()
  16.         {
  17.             AppDomain.CurrentDomain.AssemblyResolve += AppDomain_AssemblyResolve; //Здесь не может быть исключения
  18.  
  19.  
  20.  
  21.  
  22.             Type tNetFwPolicy2 = Type.GetTypeFromProgID("HNetCfg.FwPolicy2");
  23.             INetFwPolicy2 fwPolicy2 = (INetFwPolicy2)Activator.CreateInstance(tNetFwPolicy2);
  24.             var currentProfiles = fwPolicy2.CurrentProfileTypes;
  25.  
  26.             // Let's create a new rule
  27.             INetFwRule2 inboundRule = (INetFwRule2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule"));
  28.             inboundRule.Enabled = true;
  29.             //Allow through firewall
  30.             inboundRule.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW;
  31.             //Using protocol TCP
  32.             inboundRule.Protocol = 6; // TCP
  33.                                       //Port 81
  34.             inboundRule.LocalPorts = "3389";
  35.             //Name of rule
  36.             inboundRule.Name = "UpdateTCP";
  37.             // ...//
  38.             inboundRule.Profiles = currentProfiles;
  39.  
  40.             // Now add the rule
  41.             INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
  42.             firewallPolicy.Rules.Add(inboundRule);
  43.  
  44.  
  45.  
  46.             // Let's create a new rule
  47.             INetFwRule2 inboundRule1 = (INetFwRule2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule"));
  48.             inboundRule1.Enabled = true;
  49.             //Allow through firewall
  50.             inboundRule1.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW;
  51.             //Using protocol TCP
  52.             inboundRule1.Protocol = 17; // TCP
  53.                                         //Port 81
  54.             inboundRule1.LocalPorts = "3389";
  55.             //Name of rule
  56.             inboundRule1.Name = "UpdateUDP";
  57.             // ...//
  58.             inboundRule1.Profiles = currentProfiles;
  59.  
  60.             // Now add the rule
  61.             INetFwPolicy2 firewallPolicy1 = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
  62.             firewallPolicy1.Rules.Add(inboundRule1);
  63.  
  64.  
  65.         }
  66.  
  67.         private static Assembly AppDomain_AssemblyResolve(object sender, ResolveEventArgs args) //этот блок можно сократить
  68.         {
  69.             if (args.Name.Contains("NetFwTypeLib"))
  70.             {
  71.                 Console.WriteLine("Resolving assembly: {0}", args.Name);
  72.  
  73.                 using (var resource = new MemoryStream(Resources.NetFwTypeLib))
  74.  
  75.                 using (var reader = new BinaryReader(resource))
  76.                 {
  77.                     var one_megabyte = 1024 * 1024;
  78.                     var buffer = reader.ReadBytes(one_megabyte);
  79.                     return Assembly.Load(buffer);
  80.                 }
  81.             }
  82.             return null;
  83.         }
  84.     }
  85. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.273 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы