Как сделать чтобы Win32 dll и сборка были всегда рядом
От: Дмитрий Наумов  
Дата: 12.01.07 12:54
Оценка:
Есть Win32 dll и .NET сборка, которая использует эту длльку через интероп. Это два разных проекта, один соответсвенно Visual C++ Project, другой C# Project. Шарповый проект используется в разных других проектах (приложениях). Проблема в том, что при билде, шарповый проект оказывается рядом с приложением, но вот Win32 дллька нет Приходится копировать ее ручками, а это сами знаете чем чревато... Можно ли как то это дело автоматизировать?
Re: Как сделать чтобы Win32 dll и сборка были всегда рядом
От: mihasic Украина  
Дата: 12.01.07 13:14
Оценка:
Здравствуйте, Дмитрий Наумов, Вы писали:

ДН>Есть Win32 dll и .NET сборка, которая использует эту длльку через интероп. Это два разных проекта, один соответсвенно Visual C++ Project, другой C# Project. Шарповый проект используется в разных других проектах (приложениях). Проблема в том, что при билде, шарповый проект оказывается рядом с приложением, но вот Win32 дллька нет Приходится копировать ее ручками, а это сами знаете чем чревато... Можно ли как то это дело автоматизировать?


Первое, что приходит в голову — закинуть ее в ресурсы и извлекать при необходимости... хотя смсла в этом вообще не вижу.

Или имеется ввиду, чтобы при разработке проекты сохраняли выходные файлы в одну директорию? (но тогда все и так ясно)
Re[2]: Как сделать чтобы Win32 dll и сборка были всегда рядо
От: fmiracle  
Дата: 12.01.07 13:21
Оценка:
Здравствуйте, mihasic, Вы писали:

M>Или имеется ввиду, чтобы при разработке проекты сохраняли выходные файлы в одну директорию? (но тогда все и так ясно)


Если я правильно понял проблему, то хочется, чтобы можно было через "Add Reference" подключить заранее собранную .net сборку. При этом эта сборка будет скопирвона в выходную папку проекта (а так же все используемые ей сборки и т.д.). Но если эта сборка исползует native dll, то вот эти нативные либы скопированы не будут.
В результате при использовании такой сборки приходится помнить "а какие еще он использует native-библиотеки?", что совсем не здорово, и от чего хочется избавиться.
Т.е. чтобы нативные dll, используемые в подключенный .net автоматически подтягивались при сборке.

Интересный вопрос, мне тоже интеерсно.
Ответа не знаю
Re: Как сделать чтобы Win32 dll и сборка были всегда рядом
От: AlexZu Россия  
Дата: 12.01.07 13:34
Оценка:
Здравствуйте, Дмитрий Наумов, Вы писали:

ДН>Есть Win32 dll и .NET сборка, которая использует эту длльку через интероп. Это два разных проекта, один соответсвенно Visual C++ Project, другой C# Project. Шарповый проект используется в разных других проектах (приложениях). Проблема в том, что при билде, шарповый проект оказывается рядом с приложением, но вот Win32 дллька нет Приходится копировать ее ручками, а это сами знаете чем чревато... Можно ли как то это дело автоматизировать?


См. здесь
Автор: desco
Дата: 24.11.06
.

Вкратце:
— необходимо создать сброку, которая будет ссылаться на вашу unmanaged dll как на linked ресурс
(это удобно сделать в Post Build неуправляемого проекта, что-то типа:
al /v:1.0.0.0 /t:lib /link:%unmanaged_dll% /out:%managed_wrapper_path%
)
— добавить в проект ссылку на эту сброку
— теперь при билдовании студия будет копировать сброку с linked ресурсом в bin-output вашего проекта в папку вида: <AssemblyNameWithLinkedResource>, в которой будут находиться сама сброка с linked ресурсом и все ее linked ресурсы.
— в коде ссылаться на unmanaged dll в виде:

DllImport(@"AssemblyNameWithLinkedResource\unmanaged.dll")

или (только для .NET v2):
[DllImport("unmanaged.dll, AssemblyNameWithLinkedResource, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")]
Re: Как сделать чтобы Win32 dll и сборка были всегда рядом
От: _FRED_ Черногория
Дата: 12.01.07 13:35
Оценка: :)
Здравствуйте, Дмитрий Наумов, Вы писали:

ДН>Есть Win32 dll и .NET сборка, которая использует эту длльку через интероп. Это два разных проекта, один соответсвенно Visual C++ Project, другой C# Project. Шарповый проект используется в разных других проектах (приложениях). Проблема в том, что при билде, шарповый проект оказывается рядом с приложением, но вот Win32 дллька нет Приходится копировать ее ручками, а это сами знаете чем чревато... Можно ли как то это дело автоматизировать?


Нет ничего проще:
  1. создайте в C#-проекта папку Interop (имя может быть любым);
  2. правой кнопке по папке, "Add Existing Item…";
  3. выбирайте файл, около кнопки "Add" диалога выбора файла укажите "Add As Link";
  4. в Solution Explorer смотрите свойства файла: "Copy To Output Directory"…

Дальше, думаю, разберётесь
... << RSDN@Home 1.2.0 alpha rev. 670>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Re[2]: Как сделать чтобы Win32 dll и сборка были всегда рядо
От: AlexZu Россия  
Дата: 12.01.07 14:13
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>
  • в Solution Explorer смотрите свойства файла: "Copy To Output Directory"…

    Боюсь что так придется делать для всех проектов приложений (exe), которые ссылаются (явно, неявно) на сборку использующую unmanaged dll, что не есть хорошо.
    Или я ошибаюсь (с VS2005 дела не имел, а в vs2003 такого нет)?
  • Re[3]: Как сделать чтобы Win32 dll и сборка были всегда рядо
    От: _FRED_ Черногория
    Дата: 12.01.07 14:23
    Оценка:
    Здравствуйте, AlexZu, Вы писали:

    _FR>>
  • в Solution Explorer смотрите свойства файла: "Copy To Output Directory"…

    AZ>Боюсь что так придется делать для всех проектов приложений (exe), которые ссылаются (явно, неявно) на сборку использующую unmanaged dll, что не есть хорошо.

    AZ>Или я ошибаюсь (с VS2005 дела не имел, а в vs2003 такого нет)?

    Если ты о том, что эта опция не будет работать рекурсивно, то да, не будет. Но я в таких случаях для отладки прописываю Debug-путь к библиотеке в PATH и всё
    ... << RSDN@Home 1.2.0 alpha rev. 670>>
    Now playing: «Тихо в лесу…»
  • Help will always be given at Hogwarts to those who ask for it.
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.