С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.76/89: Рейтинг темы: голосов - 89, средняя оценка - 4.76
3 / 3 / 2
Регистрация: 01.07.2014
Сообщений: 32

Поместить dll в отдельную папку

01.07.2014, 15:57. Показов 19485. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть решение в VisualStudio в котором:
1. Приложение WindowsForms (добавлена ссылка на библиотеку из п.2) prog.exe
2. Библиотека Dll (managed) prog.dll

И то и другое написано на C#, все корректно работает. Единственное, что смущает - и exe, и dll после построения помещаются в одну папку - и собственно вопрос: как поместить dll в отдельную папку (типа ../lib).

/
/prog.exe
/lib/prog.dll

Варианты вроде DllImport / Reflection смотрел (хотя еще не пробовал), но сердце вещун говорит - не тем путем идете товарищ. Уж больно громоздко на первый взгляд. Может есть другие варианты?

Если уже обсуждалось, поделитесь ссылкой плз.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.07.2014, 15:57
Ответы с готовыми решениями:

.dll в отдельную папку с сохранением связей
Здравствуйте. Есть проект с кучей подключаемых .dll, которые копируются на один уровень с .exe при построении проекта. А как можно сделать,...

В файле создать массив слов, в который поместить каждое слово в отдельную ячейку
Здравствуйте! Только начал вникать в C#! Помогите написать программу для работы с текстом. Вот условие: В файле с разрешением *.txt...

вынесение процедур и функций в отдельную dll С#
Всем привет нужна помощь, есть код калькулятора, надо вынести функции private void AddOperatorToArray(Button bttn), private void...

20
29 / 29 / 10
Регистрация: 06.02.2014
Сообщений: 156
01.07.2014, 16:58
Лучший ответ Сообщение было отмечено tezaurismosis как решение

Решение

Знаю такой рабочий способ:
Помещаете свою dll в папку lib а в конфиге прописываете такую штуку
XML
1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="lib"></probing>
    </assemblyBinding>
  </runtime>
</configuration>
И теперь ваше приложение будет искать сборки в этой папке, также можно указать несколько папок через ;
4
3 / 3 / 2
Регистрация: 01.07.2014
Сообщений: 32
03.07.2014, 11:24  [ТС]
Мдя... Тема действительно обсуждалась уже не раз. И первый же ответ - вполне адекватный и точный (еще раз спасибо D_Sergeevich). В итоге, правда все сделал через консоль, а не VS, но смысл не меняется.

Допустим есть:

/probe.cs
/probe_dll.cs

Со следующим содержанием:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
//probe_dll.cs
using System;
 
namespace probe_dll
{
    public class probe_dll
    {
        public void print_probe()
        {
            Console.Write("Ok");
        }
    }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
//probe.cs
using System;
using probe_dll;
 
public class probe
{
    public static void Main()
    {
        probe_dll.probe_dll pd = new probe_dll.probe_dll();
        pd.print_probe();
    }   
}

Собираем библиотеку:
Bash
1
csc /target:library /out:probe_dll.dll probe_dll.cs
Перебрасываем полученное в /lib

Создаем в начальной папке probe.exe.config
XML
1
2
3
4
5
6
7
8
<?xml version='1.0' encoding='utf-8'?>
<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <probing privatePath="lib"/>
      </assemblyBinding>
   </runtime>
</configuration>
Собираем exe-шник:
Bash
1
csc /reference:"lib\probe_dll.dll"/out:probe.exe probe.cs
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
03.07.2014, 12:04
Цитата Сообщение от RiabininOS Посмотреть сообщение
В итоге, правда все сделал через консоль, а не VS
А в чем были сложности с VS?
0
3 / 3 / 2
Регистрация: 01.07.2014
Сообщений: 32
03.07.2014, 16:14  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
А в чем были сложности с VS?
Кроме наличия отсутствия VS под рукой - никаких.

Есть, правда, ложка дегтя в этой бочке меда - если я правильно понимаю, то впредь без probe.exe.config программка не заведется и таскать его надо с екзешником... Но по сравнению с начальным вариантом где все в одной папке это много лучше.
0
13 / 13 / 3
Регистрация: 03.12.2017
Сообщений: 20
10.12.2018, 21:12
Прошу прощения, что воздвигаю старую тему. НО! Важное примечание. Во-первых. Новые версии VS добавляют автоматически файл конфигурации. Но в нём вписан поддерживаемый исполнитель, пример:
XML
1
2
3
<startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
Чтобы программа искала директории, которые вы вписали, следует удалить эти строки. Также, сверху правильно подмечено, что без файла конфигурации программа не будет искать библиотеки в ваших папках. Придётся этот файл постоянно таскать с собой.
0
548 / 355 / 120
Регистрация: 17.08.2014
Сообщений: 1,351
10.12.2018, 21:21
Используйте mef. Можно динамически прописывать пути прямо в коде. Не нужно придумывать велосипеды с импортом рефлексией и тд. Достаточно прописать контракты.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,573
10.12.2018, 21:24
Цитата Сообщение от Vector8558 Посмотреть сообщение
Чтобы программа искала директории, которые вы вписали, следует удалить эти строки.
Это делать совершенно не обязательно.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18245 / 14161 / 5366
Регистрация: 17.03.2014
Сообщений: 28,848
Записей в блоге: 1
10.12.2018, 22:08
Цитата Сообщение от Vector8558 Посмотреть сообщение
Чтобы программа искала директории, которые вы вписали, следует удалить эти строки.
Почему ты так решил? Наличие supportedRuntime никак не мешает работе binding redirect.
0
13 / 13 / 3
Регистрация: 03.12.2017
Сообщений: 20
10.12.2018, 22:11
OwenGlendower, У меня, например, программа выдавала ошибку при поиске библиотеки. Я удалил supportedRuntime и всё заработало. Может версию asm надо сменить или что-то другое.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18245 / 14161 / 5366
Регистрация: 17.03.2014
Сообщений: 28,848
Записей в блоге: 1
10.12.2018, 22:29
Vector8558, вероятно в библиотеке дело. Какое исключение выдавалось и какая это библиотека? Может выложишь сюда простой пример для проверки?
0
13 / 13 / 3
Регистрация: 03.12.2017
Сообщений: 20
10.12.2018, 22:35
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Vector8558, вероятно в библиотеке дело. Какое исключение выдавалось и какая это библиотека? Может выложишь сюда простой пример для проверки?
OwenGlendower, Ох. Код смешной. Специально делал для теста. Ничего страшного там нет. Просто класс в конструктор которого передаётся строка записывает в в свойство значение этой строки. А потом главное приложение (консольное приложение) создаёт экземпляр класса вписывает значение в конструктор (к примеру 123). Далее просто выводит значение св-ва (123) в консольку. В коде придраться не к чему. Именно дело в этом. Не совпала версия скорее всего. Методом тыка просто убрал эту строку и всё - заработало. до этого Andreyip говорил про MEF. Решение, кажется, хорошее. Изучу эту технологию.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18245 / 14161 / 5366
Регистрация: 17.03.2014
Сообщений: 28,848
Записей в блоге: 1
10.12.2018, 22:38
Цитата Сообщение от Vector8558 Посмотреть сообщение
Ох. Код смешной. Специально делал для теста.
Так тем более поделись тогда. Хочется понять как наличие supportedRuntime может помешать работе биндинга сборок.
0
13 / 13 / 3
Регистрация: 03.12.2017
Сообщений: 20
10.12.2018, 23:13
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Так тем более поделись тогда. Хочется понять как наличие supportedRuntime может помешать работе биндинга сборок.
Код главной программы:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace libTesting
{
    class Program
    {
        static void Main(string[] args)
        {
            //Класс
            LTLib.Testing testing = new LTLib.Testing("123");
            //Вывод св-ва
            Console.WriteLine(testing.Tester);
            Console.ReadKey();
        }
    }
}
Код библиотеки LTLib.dll:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace LTLib
{
    public class Testing
    {
        public string Tester { get; set; }
        public Testing(string t)
        {
            Tester = t;
        }
    }
}
Ничего особенного, даже сверхъестественные модули не подключал
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
10.12.2018, 23:18
Цитата Сообщение от Vector8558 Посмотреть сообщение
Ничего особенного, даже сверхъестественные модули не подключал
А целевая версия фреймворка у обоих проектов одинаковая установлена?
0
13 / 13 / 3
Регистрация: 03.12.2017
Сообщений: 20
10.12.2018, 23:20
Цитата Сообщение от kolorotur Посмотреть сообщение
А целевая версия фреймворка у обоих проектов одинаковая установлена?
Да, 4.6.1
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
10.12.2018, 23:29
Цитата Сообщение от Vector8558 Посмотреть сообщение
Да, 4.6.1
Попробовал с вашим проверочным кодом — вроде работает, сборку в папке lib находит как нужно, ошибок не выдает.
0
13 / 13 / 3
Регистрация: 03.12.2017
Сообщений: 20
10.12.2018, 23:34
Цитата Сообщение от kolorotur Посмотреть сообщение
Попробовал с вашим проверочным кодом — вроде работает, сборку в папке lib находит как нужно, ошибок не выдает.
Framework 4.6.1?
А файл конфига какой?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
10.12.2018, 23:58
ConsoleApp2.zip

После построения переместите зависимости в подпапку lib.
0
13 / 13 / 3
Регистрация: 03.12.2017
Сообщений: 20
11.12.2018, 14:10
Цитата Сообщение от kolorotur Посмотреть сообщение
Вложение 991648

После построения переместите зависимости в подпапку lib.
Теперь я окончательно ничего не понял . И ваш, и мой пример заработал. Может я банально файл конфигурации забыл сохранить?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.12.2018, 14:10
Помогаю со студенческими работами здесь

DLL в отдельную папку
Есть Solution. в нем два проекта exe и dll. Как сделать что бы dll при компиляции ложился в другую папку (например ..\dll\)

Как поместить все 3 ехешника в одну папку и запускать их просто из StartUpPath
Есть 3 формы. В каждой форме есть кнопочка перехода в другую форму Process.Start(Application.StartUpPath +...

Не могу поместить dll в exe
После использования costura почти все dll пошли в exe, но пару dll, которые в папках, не могу закинуть в exe. В чём проблема ? (в...

Поместить две DLL в EXE файл
Добрый день! Кто подскажет, как вшить две DLL-ки(AxInterop.WMPLib.dll, Interop.WMPLib.dll) в EXE файл? В инете ничего подходящего не...

Добавить dll в ресурсы, потом выгружать в папку с программой
Здравствуйте. Не хочу делать инсталятор программы, т.к. у программы есть всего 1 зависимый dll файл. Хочу добавить этот dll в ресурсы, а...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru