Есть Win32 dll и .NET сборка, которая использует эту длльку через интероп. Это два разных проекта, один соответсвенно Visual C++ Project, другой C# Project. Шарповый проект используется в разных других проектах (приложениях). Проблема в том, что при билде, шарповый проект оказывается рядом с приложением, но вот Win32 дллька нет Приходится копировать ее ручками, а это сами знаете чем чревато... Можно ли как то это дело автоматизировать?
Re: Как сделать чтобы Win32 dll и сборка были всегда рядом
Здравствуйте, Дмитрий Наумов, Вы писали:
ДН>Есть Win32 dll и .NET сборка, которая использует эту длльку через интероп. Это два разных проекта, один соответсвенно Visual C++ Project, другой C# Project. Шарповый проект используется в разных других проектах (приложениях). Проблема в том, что при билде, шарповый проект оказывается рядом с приложением, но вот Win32 дллька нет Приходится копировать ее ручками, а это сами знаете чем чревато... Можно ли как то это дело автоматизировать?
Первое, что приходит в голову — закинуть ее в ресурсы и извлекать при необходимости... хотя смсла в этом вообще не вижу.
Или имеется ввиду, чтобы при разработке проекты сохраняли выходные файлы в одну директорию? (но тогда все и так ясно)
Re[2]: Как сделать чтобы Win32 dll и сборка были всегда рядо
Здравствуйте, mihasic, Вы писали:
M>Или имеется ввиду, чтобы при разработке проекты сохраняли выходные файлы в одну директорию? (но тогда все и так ясно)
Если я правильно понял проблему, то хочется, чтобы можно было через "Add Reference" подключить заранее собранную .net сборку. При этом эта сборка будет скопирвона в выходную папку проекта (а так же все используемые ей сборки и т.д.). Но если эта сборка исползует native dll, то вот эти нативные либы скопированы не будут.
В результате при использовании такой сборки приходится помнить "а какие еще он использует native-библиотеки?", что совсем не здорово, и от чего хочется избавиться.
Т.е. чтобы нативные dll, используемые в подключенный .net автоматически подтягивались при сборке.
Интересный вопрос, мне тоже интеерсно.
Ответа не знаю
Re: Как сделать чтобы Win32 dll и сборка были всегда рядом
Здравствуйте, Дмитрий Наумов, Вы писали:
ДН>Есть Win32 dll и .NET сборка, которая использует эту длльку через интероп. Это два разных проекта, один соответсвенно Visual C++ Project, другой C# Project. Шарповый проект используется в разных других проектах (приложениях). Проблема в том, что при билде, шарповый проект оказывается рядом с приложением, но вот Win32 дллька нет Приходится копировать ее ручками, а это сами знаете чем чревато... Можно ли как то это дело автоматизировать?
Вкратце:
— необходимо создать сброку, которая будет ссылаться на вашу 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 в виде:
Здравствуйте, Дмитрий Наумов, Вы писали:
ДН>Есть Win32 dll и .NET сборка, которая использует эту длльку через интероп. Это два разных проекта, один соответсвенно Visual C++ Project, другой C# Project. Шарповый проект используется в разных других проектах (приложениях). Проблема в том, что при билде, шарповый проект оказывается рядом с приложением, но вот Win32 дллька нет Приходится копировать ее ручками, а это сами знаете чем чревато... Можно ли как то это дело автоматизировать?
Нет ничего проще: создайте в C#-проекта папку Interop (имя может быть любым);
правой кнопке по папке, "Add Existing Item…";
выбирайте файл, около кнопки "Add" диалога выбора файла укажите "Add As Link";
в 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 и сборка были всегда рядо
Здравствуйте, _FRED_, Вы писали:
_FR>в Solution Explorer смотрите свойства файла: "Copy To Output Directory"…
Боюсь что так придется делать для всех проектов приложений (exe), которые ссылаются (явно, неявно) на сборку использующую unmanaged dll, что не есть хорошо.
Или я ошибаюсь (с VS2005 дела не имел, а в vs2003 такого нет)?
Re[3]: Как сделать чтобы Win32 dll и сборка были всегда рядо
Здравствуйте, 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.