powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как сказать приложению, где искать ассембли?
25 сообщений из 29, страница 1 из 2
Как сказать приложению, где искать ассембли?
    #39558335
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть живой пример:
https://powerbi.microsoft.com/en-us/desktop/

Интересная утилита.

Я хочу приконнектиться к PostgreSQL, пишет ошибку.
После установки провайдера для постгреса Npgsql в GC - подключается к постгресу и т.д.

Вопрос: можно ли заставить приложение искать Npgsql.dll не в GC, а в текущем фолдере, куда я просто его скопирую?
...
Рейтинг: 0 / 0
Как сказать приложению, где искать ассембли?
    #39558395
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как сказать приложению, где искать ассембли?
    #39558476
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buserРолг Хупин, How the Runtime Locates Assemblies

Сделал так:

1. создал фолдер DLLS внутри фолдера BIN, откуда запускается эхэ, и скопировал туда Npgsql.dll
2. В конфиг файл приложения добавил

Код: c#
1.
2.
3.
4.
5.
  <runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <probing privatePath="DLLS;"/>
    </assemblyBinding> 
  </runtime>



Всеравно не видит провайдер, если установить его в GC - тогда видит.
...
Рейтинг: 0 / 0
Как сказать приложению, где искать ассембли?
    #39558489
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинbuserРолг Хупин, How the Runtime Locates Assemblies

Сделал так:

1. создал фолдер DLLS внутри фолдера BIN, откуда запускается эхэ, и скопировал туда Npgsql.dll
2. В конфиг файл приложения добавил

Код: c#
1.
2.
3.
4.
5.
  <runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <probing privatePath="DLLS;"/>
    </assemblyBinding> 
  </runtime>



Все равно не видит провайдер, если установить его в GC - тогда видит.
Убрать точку с запятой в конце имени папки в privatePath. Предупреждаю сразу: относительные пути в этом элементе - только относительно папки расположения exe вглубь этой папки. И вроде как абсолютные пути этот элемент тоже не поддерживает. При каком-то более другом расположении копать в сторону AppDomain.AssemblyResolve Event .
...
Рейтинг: 0 / 0
Как сказать приложению, где искать ассембли?
    #39558490
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,
У нас в папке exe и
Conn = new NpgsqlConnection (string)
...
Рейтинг: 0 / 0
Как сказать приложению, где искать ассембли?
    #39558492
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. Чтобы не создавать папку для библиотек руками, и не копировать ни руками, ни в post-build event'е - добавить в .csproj:
Код: xml
1.
2.
3.
4.
5.
6.
<Target Name="AfterBuild">
  <ItemGroup>
    <MoveToLibFolder Exclude="$(OutputPath)$TargetName.pdb" Include="$(OutputPath)*.dll ; $(OutputPath)*.pdb ; $(OutputPath)*.xml" />
  </ItemGroup>
  <Move SourceFiles="@(MoveToLibFolder)" DestinationFolder="$(OutputPath)DLLS" OverwriteReadOnlyFiles="true" />
</Target>


Ну, или установить PrettyBin . Он заодно автоматом вносит нужные модификации и в конфиг.
...
Рейтинг: 0 / 0
Как сказать приложению, где искать ассембли?
    #39558493
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныP.S. Чтобы не создавать папку для библиотек руками, и не копировать ни руками, ни в post-build event'е - добавить в .csproj:
Код: xml
1.
2.
3.
4.
5.
6.
<Target Name="AfterBuild">
  <ItemGroup>
    <MoveToLibFolder Exclude="$(OutputPath)$TargetName.pdb" Include="$(OutputPath)*.dll ; $(OutputPath)*.pdb ; $(OutputPath)*.xml" />
  </ItemGroup>
  <Move SourceFiles="@(MoveToLibFolder)" DestinationFolder="$(OutputPath)DLLS" OverwriteReadOnlyFiles="true" />
</Target>


Ну, или установить PrettyBin . Он заодно автоматом вносит нужные модификации и в конфиг.

да, но в данном случае - это приложение не моё, Майкрософта.
Я просто хотел бы избежать установки провайдера в GC.
...
Рейтинг: 0 / 0
Как сказать приложению, где искать ассембли?
    #39558509
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупинда, но в данном случае - это приложение не моё, Майкрософта.
Я просто хотел бы избежать установки провайдера в GC.
Ну конфиг у этого приложения имеется? Если да - откорректируйте его вручную, и вручную создайте папки/скопируйте файлы. Если нет - тогда ой.
...
Рейтинг: 0 / 0
Как сказать приложению, где искать ассембли?
    #39558642
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cкажите пусть ищет в ООН.
Сборки можно загрузить в домен и во время выполнения, если сильно надо, не зависимо от каких либо путей.
...
Рейтинг: 0 / 0
Как сказать приложению, где искать ассембли?
    #39558689
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesСборки можно загрузить в домен и во время выполнения, если сильно надо, не зависимо от каких либо путей.
И у стороннего приложения без исходников?
...
Рейтинг: 0 / 0
Как сказать приложению, где искать ассембли?
    #39558882
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныРолг Хупинда, но в данном случае - это приложение не моё, Майкрософта.
Я просто хотел бы избежать установки провайдера в GC.
Ну конфиг у этого приложения имеется? Если да - откорректируйте его вручную, и вручную создайте папки/скопируйте файлы. Если нет - тогда ой.

да, выше я описал, что сделал

http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1278038&msg=20978682

Не верится, что нет решения через конфиг.
...
Рейтинг: 0 / 0
Как сказать приложению, где искать ассембли?
    #39558921
Jenyok2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хочу присоединиться к данной теме.
Есть вопросы по assembly.
.
Например.
Есть папка C:\Work\Program2\Bin\ где лежит исполняемый модуль программы A1.exe .
Данный программный модуль A1.exe вызывает некую стороннюю DLL (DLL1.dll), которая лежит в папке C:\Work\Program1\ .
Папки C:\Work\Program1\ , C:\Work\Program2\Bin\ НЕ входят в переменную окружения %Path% и не являются системными.
.
Как сделать так, чтобы программный модуль A1.exe в папке C:\Work\Program2\Bin\ при старте программы находил DLL (DLL1.dll) в папке C:\Work\Program1\ ?
.
Из условия видно, что папка C:\Work\Program1\ не является подпапкой папки C:\Work\Program2\Bin\ ?
.
Жду Ваших ответов.
.
...
Рейтинг: 0 / 0
Как сказать приложению, где искать ассембли?
    #39558942
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинНе верится, что нет решения ч
Выше писал как у нас, не работает?
...
Рейтинг: 0 / 0
Как сказать приложению, где искать ассембли?
    #39558949
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jenyok2,
Ты с расчётом на windows installer смотри.
Т.е. юзверь инсталлятором ставит либо расшаренную длл на несколько программ, либо только для одной.
Если для одной, то рядом с exe и кидай.
...
Рейтинг: 0 / 0
Как сказать приложению, где искать ассембли?
    #39558961
Jenyok2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123Jenyok2,
Ты с расчётом на windows installer смотри.
Т.е. юзверь инсталлятором ставит либо расшаренную длл на несколько программ, либо только для одной.
Если для одной, то рядом с exe и кидай.
.
Условия задачи совсем другие.
Смысл такой, что в папке C:\Work\Program1\ находится сторонняя программа с DLL1.dll, которая периодически обновляется, в том числе обновляется файл DLL1.dll .
Т.е. при каждом обновлении сторонней программы в паке C:\Work\Program1\ необходимо НЕ забывать обновить (скопировать) DLL1.dll в папку C:\Work\Program2\Bin\ с программой A1.exe . Это НЕ всегда выполнимо, можно забыть про обновление DLL1.dll в папке C:\Work\Program2\Bin\ .
Поэтому и вопрос как загрузить DLL1.dll из папки C:\Work\Program1\ программой A1.exe запущенной из папки C:\Work\Program2\Bin\ .
.
Хотелось бы увидеть пример кода.
.
Жду Ваших ответов.
...
Рейтинг: 0 / 0
Как сказать приложению, где искать ассембли?
    #39558986
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jenyok2Это НЕ всегда выполнимо, можно забыть про обновление DLL1.dll в папке C:\Work\Program2\Bin\ .
А то что можно забыть про абсолютный прибитый гвоздями путь ничего?
Студия АВТОМАТИЧЕСКИ копирует длл при подготовке релиза рядом с exe.
Обновлять setup.exe а не руками.
Ну, или в приложении вбивай путь гвоздями.
...
Рейтинг: 0 / 0
Как сказать приложению, где искать ассембли?
    #39558989
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jenyok2,
- узнать путь exe
- на ранг выше папку
- добавляем program2/bin
- копируем к себе или грузим длл в динамике.
...
Рейтинг: 0 / 0
Как сказать приложению, где искать ассембли?
    #39559030
Addx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jenyok2Petro123Jenyok2,
Ты с расчётом на windows installer смотри.
Т.е. юзверь инсталлятором ставит либо расшаренную длл на несколько программ, либо только для одной.
Если для одной, то рядом с exe и кидай.
.
Условия задачи совсем другие.
Смысл такой, что в папке C:\Work\Program1\ находится сторонняя программа с DLL1.dll, которая периодически обновляется, в том числе обновляется файл DLL1.dll .
Т.е. при каждом обновлении сторонней программы в паке C:\Work\Program1\ необходимо НЕ забывать обновить (скопировать) DLL1.dll в папку C:\Work\Program2\Bin\ с программой A1.exe . Это НЕ всегда выполнимо, можно забыть про обновление DLL1.dll в папке C:\Work\Program2\Bin\ .
Поэтому и вопрос как загрузить DLL1.dll из папки C:\Work\Program1\ программой A1.exe запущенной из папки C:\Work\Program2\Bin\ .
.
Хотелось бы увидеть пример кода.
.
Жду Ваших ответов.

1. Если Вы будете копировать автоматически при старте или при обновлении, Вы НЕ забудете. (слово "забыть" мне не понятно применительно к программному продукту)
2. Грузите в рантайме, конфиги хоть в базе храните.
3. Ну, есть и извращения, когда в код компилятся левые пути, да еще и абсолютные. Тут большой простор для творчества, хотя желательно не оставлять его в релизах.

Код Вам пусть пишут другие, сорри.
...
Рейтинг: 0 / 0
Как сказать приложению, где искать ассембли?
    #39559052
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно наверное еще в каталоге/подкаталоге приложения сделать hard link на нужную assembly.


Jenyok2Смысл такой, что в папке C:\Work\Program1\ находится сторонняя программа с DLL1.dll, которая периодически обновляется, в том числе обновляется файл DLL1.dll .
Т.е. при каждом обновлении сторонней программы в паке C:\Work\Program1\ необходимо НЕ забывать обновить (скопировать) DLL1.dll в папку C:\Work\Program2\Bin\ с программой A1.exe . Это НЕ всегда выполнимо, можно забыть про обновление DLL1.dll в папке C:\Work\Program2\Bin\ .
Поэтому и вопрос как загрузить DLL1.dll из папки C:\Work\Program1\ программой A1.exe запущенной из папки C:\Work\Program2\Bin\ .
В таком режиме - грузить в коде Assembly в свой appDomain,потом выгружать
...
Рейтинг: 0 / 0
Как сказать приложению, где искать ассембли?
    #39559059
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
абсолютные пути в программе это зло и недопустимо.
Лучше использовать:
1.Переменные окружения
2. в .NET многие пути можно получить из кода, временную папку, рабочий стол, программные файлы, appdata и прочее, прочее прочее. Path.GetTempPath(); и другие
3. Текущий каталог: Environment.CurrentDirectory (вроде так)
Папку от куда запущена текущая сборка
...
Рейтинг: 0 / 0
Как сказать приложению, где искать ассембли?
    #39559224
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Можно наверное еще в каталоге/подкаталоге приложения сделать hard link на нужную assembly.


Jenyok2Смысл такой, что в папке C:\Work\Program1\ находится сторонняя программа с DLL1.dll, которая периодически обновляется, в том числе обновляется файл DLL1.dll .
Т.е. при каждом обновлении сторонней программы в паке C:\Work\Program1\ необходимо НЕ забывать обновить (скопировать) DLL1.dll в папку C:\Work\Program2\Bin\ с программой A1.exe . Это НЕ всегда выполнимо, можно забыть про обновление DLL1.dll в папке C:\Work\Program2\Bin\ .
Поэтому и вопрос как загрузить DLL1.dll из папки C:\Work\Program1\ программой A1.exe запущенной из папки C:\Work\Program2\Bin\ .
В таком режиме - грузить в коде Assembly в свой appDomain,потом выгружать

Как выгрузить ассембли из аппдомена?

зы.
You can not unload an assembly from an appdomain. You can destroy appdomains, but once an assembly is loaded into an appdomain, it's there for the life of the appdomain.
...
Рейтинг: 0 / 0
Как сказать приложению, где искать ассембли?
    #39559233
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jenyok2Petro123Jenyok2,
Ты с расчётом на windows installer смотри.
Т.е. юзверь инсталлятором ставит либо расшаренную длл на несколько программ, либо только для одной.
Если для одной, то рядом с exe и кидай.
.
Условия задачи совсем другие.
Смысл такой, что в папке C:\Work\Program1\ находится сторонняя программа с DLL1.dll, которая периодически обновляется, в том числе обновляется файл DLL1.dll .
Т.е. при каждом обновлении сторонней программы в паке C:\Work\Program1\ необходимо НЕ забывать обновить (скопировать) DLL1.dll в папку C:\Work\Program2\Bin\ с программой A1.exe . Это НЕ всегда выполнимо, можно забыть про обновление DLL1.dll в папке C:\Work\Program2\Bin\ .
Поэтому и вопрос как загрузить DLL1.dll из папки C:\Work\Program1\ программой A1.exe запущенной из папки C:\Work\Program2\Bin\ .
.
Хотелось бы увидеть пример кода.
.
Жду Ваших ответов.

Напишите минимальное приложение, а лучше - сервис, в котором будет файл watcher, следящий за исходным фолдером, и если там обновится длл, он
1. пишет вам в почту сообщение
2. копирует длл в нужное место
3. по всей сети отправляет месседжи об обновлении длл
4. не дает работать на этом компьютере, навязчиво напоминая, мол, не забывай
...
...
Рейтинг: 0 / 0
Как сказать приложению, где искать ассембли?
    #39559241
Jenyok2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ролг ХупинJenyok2пропущено...

.
Условия задачи совсем другие.
Смысл такой, что в папке C:\Work\Program1\ находится сторонняя программа с DLL1.dll, которая периодически обновляется, в том числе обновляется файл DLL1.dll .
Т.е. при каждом обновлении сторонней программы в паке C:\Work\Program1\ необходимо НЕ забывать обновить (скопировать) DLL1.dll в папку C:\Work\Program2\Bin\ с программой A1.exe . Это НЕ всегда выполнимо, можно забыть про обновление DLL1.dll в папке C:\Work\Program2\Bin\ .
Поэтому и вопрос как загрузить DLL1.dll из папки C:\Work\Program1\ программой A1.exe запущенной из папки C:\Work\Program2\Bin\ .
.
Хотелось бы увидеть пример кода.
.
Жду Ваших ответов.

Напишите минимальное приложение, а лучше - сервис, в котором будет файл watcher, следящий за исходным фолдером, и если там обновится длл, он
1. пишет вам в почту сообщение
2. копирует длл в нужное место
3. по всей сети отправляет месседжи об обновлении длл
4. не дает работать на этом компьютере, навязчиво напоминая, мол, не забывай
...
.
Лишнее все это...
Писать лишнюю программу, забивать почту спамом, копировать файлы.
.
Уже есть готовая программа, которую надо подправить.
Задача простая, загрузить DLL из другой директории.
Возможно или нет ?
.
...
Рейтинг: 0 / 0
Как сказать приложению, где искать ассембли?
    #39559282
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинНапишите минимальное приложение, а лучше - сервис, в котором будет файл watcher, следящий за исходным фолдером, и если там обновится длл, он
1. пишет вам в почту сообщение
2. копирует длл в нужное место
3. по всей сети отправляет месседжи об обновлении длл
4. не дает работать на этом компьютере, навязчиво напоминая, мол, не забывай
...
выгрузить сборки из домена невозможно. точка.
можно создать другой AppDomain, загрузить сборки туда. Но это накладывает определенные ограничения на передачу данных между доменами.
...
Рейтинг: 0 / 0
Как сказать приложению, где искать ассембли?
    #39559332
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинСон Веры Павловныпропущено...

Ну конфиг у этого приложения имеется? Если да - откорректируйте его вручную, и вручную создайте папки/скопируйте файлы. Если нет - тогда ой.

да, выше я описал, что сделал

http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1278038&msg=20978682

Не верится, что нет решения через конфиг.
Берите fusion log viewer, ищите попытку загрузки вашей библиотеки, смотрите, почему не загрузилась. Есть подозрение, что в локальную папку выложена библиотека не той версии, либо эта библиотека тянет за собой какие-то зависимости, которых нет в локальной папке.
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как сказать приложению, где искать ассембли?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]