Использование 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;
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д