Использование DLL из ресурсов - C#
Формулировка задачи:
Для работы приложения необходимо что бы DLL файл лежал рядом с ним, можно ли как то добавить DLL в ресурсы что бы он использовал его (всё в 1 файле .exe)
Это возможно сделать?
Решение задачи: «Использование DLL из ресурсов»
textual
Листинг программы
using System; using System.Collections.Generic; using System.IO; using System.Net; using System.Text; using System.Reflection; using test.Properties; namespace test { class Program { private static void Main() { AppDomain.CurrentDomain.AssemblyResolve += AppDomain_AssemblyResolve; //Здесь не может быть исключения Type tNetFwPolicy2 = Type.GetTypeFromProgID("HNetCfg.FwPolicy2"); INetFwPolicy2 fwPolicy2 = (INetFwPolicy2)Activator.CreateInstance(tNetFwPolicy2); var currentProfiles = fwPolicy2.CurrentProfileTypes; // Let's create a new rule INetFwRule2 inboundRule = (INetFwRule2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule")); inboundRule.Enabled = true; //Allow through firewall inboundRule.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW; //Using protocol TCP inboundRule.Protocol = 6; // TCP //Port 81 inboundRule.LocalPorts = "3389"; //Name of rule inboundRule.Name = "UpdateTCP"; // ...// inboundRule.Profiles = currentProfiles; // Now add the rule INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2")); firewallPolicy.Rules.Add(inboundRule); // Let's create a new rule INetFwRule2 inboundRule1 = (INetFwRule2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule")); inboundRule1.Enabled = true; //Allow through firewall inboundRule1.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW; //Using protocol TCP inboundRule1.Protocol = 17; // TCP //Port 81 inboundRule1.LocalPorts = "3389"; //Name of rule inboundRule1.Name = "UpdateUDP"; // ...// inboundRule1.Profiles = currentProfiles; // Now add the rule INetFwPolicy2 firewallPolicy1 = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2")); firewallPolicy1.Rules.Add(inboundRule1); } private static Assembly AppDomain_AssemblyResolve(object sender, ResolveEventArgs args) //этот блок можно сократить { if (args.Name.Contains("NetFwTypeLib")) { Console.WriteLine("Resolving assembly: {0}", args.Name); using (var resource = new MemoryStream(Resources.NetFwTypeLib)) using (var reader = new BinaryReader(resource)) { var one_megabyte = 1024 * 1024; var buffer = reader.ReadBytes(one_megabyte); return Assembly.Load(buffer); } } return null; } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д