Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Зависимые dll в другой директории


Автор: Cheklov 13.8.2008, 12:18
Как в результате компиляции зависимые dll файлы поместить в другую директорию? Например:

./
/modules/System.Core.dll
/modules/System.Net.dll
/Program.exe

Автор: Partizan 13.8.2008, 12:25
Cheklov, 

либо прописать в свойствах проекта Postbuild event, в котором будет производиться копирование в нужное место
либо опять же в свойствах проекта выставить нужную Output dir

Автор: Cheklov 14.8.2008, 12:05
По-моему это не то, что нужно. Поясню более подробно. Проект использует dll сторонних разработчиков. И необходимо, чтобы после компиляции проекты dll расположились в папке, а не в одной директории с exe-файлом. Оба предложенных метода не подходят.

Автор: nagg 14.8.2008, 12:22
можно их в GAC. а по теме - это делается через app.config там указывается пути к сборкам. если не ошибаюсь...

Автор: PashaPash 14.8.2008, 12:44
Cheklov, гугл по assembly probing

Автор: Partizan 14.8.2008, 12:45
Cheklov, чем postbuild event не угодил???  smile 

например результат компиляции у нас помещается в папку C:\Project\bin\Debug\
Пусть дллка сторонних разработчиков под названием xxx.dll лежит в папке C:\3rdparty\

тогда после того как мы пропишем в постбилды какого-нить это:

md "$(SolutionDir)bin\$(ConfigurationName)\modules"
copy "C:\3rdparty\xxx.dll" "$(SolutionDir)bin\$(ConfigurationName)\modules"

в результате билда у нас xxx.dll окажется в C:\Project\bin\Debug\modules\

з.ы. если не хочется чтобы дллки копировались в outputdir, то просто надо установить в соответствующих референсах CopyToOutputDir в false..


nagg, GAC не поможет ибо туда можно засовывать только strong named сборки.

Автор: Cheklov 15.8.2008, 11:07
Postbuild хорош для автоматизации копирования сборок в нужную директорию. Но не сообщает исполняемой среде, где ей искать эти сборки после запуска программы, так как попытается найти их в каталоге приложения.

В дополнение к вышеуказанным инструкциям Postbuild необходимо в файл конфигурации добавить следующее

Код

<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <probing privatePath="modules"/>
        </assemblyBinding>
    </runtime>
</configuration>



Здесь главную роль играет атрибут privatePath, поскольку он используется для указания подкаталогов в каталоге приложения, где среда CLR должна осуществлять зондирование.

Автор: Partizan 15.8.2008, 11:37
Cheklov, ну в вопросе о probing ничего не было сказано изначально  smile 

Цитата

 Как в результате компиляции зависимые dll файлы поместить в другую директорию?

Автор: Cheklov 15.8.2008, 12:13
Я уже понял, что не правильно объяснил. Спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)