Использование 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;
        }
    }
}

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


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

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

11   голосов , оценка 4.273 из 5
Похожие ответы