0 / 0 / 0
Регистрация: 17.02.2016
Сообщений: 59
1

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

22.05.2016, 18:55. Показов 1627. Ответов 6
Метки нет (Все метки)

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

Это возможно сделать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2016, 18:55
Ответы с готовыми решениями:

Использование dll Из ресурсов проекта
Не подскажите, можно ли использовать dll библиотеку из ресурсов проекта? Или ее придется дропнуть...

Подключение dll с ресурсов и его дальнейшее использование в нём
Как подключить к примеру Interop.WMPLib.dll в программу через ресурсы ? В данный момент стоит...

Подключение dll из ресурсов внутри другой dll
Здравствуйте! Есть сторонняя dll и собственная dll. Собственная dll написана для удобной работы со...

Динамическая загрузка Dll из ресурсов и ее использование
Пытаюсь разобраться для себя , прошу помощи сделал как в статье https://habrahabr.ru/post/85480/ ...

6
Эксперт .NET
6451 / 4053 / 1598
Регистрация: 09.05.2015
Сообщений: 9,481
22.05.2016, 19:00 2
Цитата Сообщение от GoreTvoe Посмотреть сообщение
Это возможно сделать?
Возможно. Тут полно тем с решением на форуме, ключевые слова AssemblyResolve, Resources...
0
0 / 0 / 0
Регистрация: 17.02.2016
Сообщений: 59
22.05.2016, 20:17  [ТС] 3
Такая вот ошибка:

Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка CS0161 "Program.AppDomain_AssemblyResolve(object, ResolveEventArgs)": не все ветви кода возвращают значение. test C:\Users\GoreTvoe\Desktop\test\test\test\Program.cs 68 Активно

Код:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;
using NetFwTypeLib;
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("Interop_NetFwTypeLib"))
            {
                Console.WriteLine("Resolving assembly: {0}", args.Name);
                return Assembly.Load(Resources.Interop_NetFwTypeLib);
            }
        }
    }
}
0
Эксперт .NET
6451 / 4053 / 1598
Регистрация: 09.05.2015
Сообщений: 9,481
22.05.2016, 20:38 4
Разве не очевидная ошибка? Вы не возвращаете значение если условие не выполняется. Добавьте в AppDomain_AssemblyResolve
C#
1
return null;
0
0 / 0 / 0
Регистрация: 17.02.2016
Сообщений: 59
22.05.2016, 20:51  [ТС] 5
Теперь не понимаю как использовать подключенную DLL:
Ошибки:
Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка CS0246 Не удалось найти тип или имя пространства имен "INetFwPolicy2" (возможно, отсутствует директива using или ссылка на сборку). test C:\Users\GoreTvoe\Desktop\test\test\test\Program.cs 23 Активно



Код:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
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;
        }
    }
}
0
Эксперт .NET
6451 / 4053 / 1598
Регистрация: 09.05.2015
Сообщений: 9,481
22.05.2016, 21:05 6
Добавьте её в References и используйте как обычно без всяких Type.GetTypeFromProgID, Activator.CreateInstance и т.д..
0
0 / 0 / 0
Регистрация: 17.02.2016
Сообщений: 59
22.05.2016, 21:17  [ТС] 7
Как это сделать?
0
22.05.2016, 21:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.05.2016, 21:17
Помогаю со студенческими работами здесь

Подключение dll из ресурсов
Не бросайтесь камнями сразу. Было уже много раз эта тема тут, но у меня так и не получилось...

Подключение dll из ресурсов
Вопрос такой. Имею библиотеку на шарпе, но сорцов ее не имею. И получать на выходе больше одного...

Загрузка ресурсов из dll
Создал библиотеку в библиотеке три папки с изображениями, библиотека подключена к другому проекту....

Подключение DLL из ресурсов
Всем привет . Как засунуть длл в ресурсы и её использовать ?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru