2008-10-24 2 views
2

У меня есть решение Visual Studio 2008 с двумя проектами в нем. C++ DLL и приложение Csharp.Visual Studio (2008) смешанные режимы проекта. C-sharp проект зависит от C++ dll, но C++ dll не перестраивается

Приложение Csharp использует [DllImport] для доступа к функциям в DLL и имеет зависимость, установленную в DLL.

По какой-то причине установить зависимость недостаточно, чтобы заставить VS копировать DLL в путь сборки приложения. Таким образом, проект приложения имеет событие post-build, которое вызывает копирование DLL. (Если кто-нибудь знает более чистый способ сделать это, сообщите мне об этом!)

Проблема заключается в том, что когда я вношу изменения в код DLL, попробуйте запустить приложение Csharp в отладчике VS2008 не понимает, что DLL необходимо перестроить (и повторно скопировать).

Мне нужно принудительно выполнить повторное построение приложения Csharp (т. Е. Явно выбрать сборку или «прикоснуться» к файлу .CS).

Кто-нибудь знает, как заставить Visual Studio делать правильные вещи? Спасибо, Роб

правок: Я утра с использованием зависимостей проекта. Они работают неправильно.

I am, используя событие после сборки, чтобы скопировать DLL через.

Вопрос заключается в том, что, если вы просто выбрать для отладки приложения, Visual Studio не удается перекомпилировать измененный проект C++, несмотря на то, что существует зависимость в месте.

Я знаю, что зависимость работает, потому что, если я выберу «Build» (в отличие от «Debug»), будет создана C++ DLL.

ответ

0

Хм ... так что я раньше этого не делал, но я просто собрал проект C++ lib и проект winform C# в том же решении. Я щелкнул правой кнопкой мыши по решению, выбрал «Свойства», а затем в разделе «Общие свойства» - «Зависимости проектов», я сделал C# одним зависеть от C++.

Когда я создаю мод для C++, он спросит меня, хочу ли я перестроить C++. Также есть флажок «Не спрашивайте меня».

Возможно, мой тест отличается от вашей ситуации, но, похоже, он работал, когда я это делал.

Надеюсь, что это поможет.

+0

Проблема очевидна, если вы попытаетесь отладить приложение Csharp. Он не понимает, что ему нужно перестроить DLL. – Rob 2008-10-24 17:39:53

+0

Странно - я не видел этого поведения. Когда я нажал кнопку запуска и работал в режиме отладки, он заметил, что DLL нужно было перестроить. – itsmatt 2008-10-24 17:41:46

0

Предполагая, что проект DLL не используется в другом решении, почему бы не поместить событие post-build в проект приложения DLL , поэтому он всегда копируется?

0

Я не пробовал, но не могу ли вы сделать это с помощью порядка сборки?

1

«Сборка» и «Отладка» делают разные вещи. В «Инструменты» - «Параметры» - «Проекты и решения» - «Сборка и запуск», установлен флажок «Только создавать проекты запуска и зависимости от запуска». Это проверено по умолчанию. Итак, если VS не распознает DLL как зависимость, он не будет строить его, когда вы выберете «Debug».

У меня нет VS для руки (только Express), но вы можете попробовать добавить C++ DLL в качестве ссылки, а не зависимости.

0

У меня возникла такая же проблема с приложениями, которые имеют зависимости проекта DLL. Мне кажется, что проблема заключается в том, что Visual Studio запускает событие post-build, если ему нужно перекомпилировать что-то в проекте приложения. Таким образом, если вы измените источник DLL без изменения каких-либо заголовков, включенных в приложение, то приложение не перекомпилируется, поскольку с точки зрения DLL эта же. Поскольку приложение не перекомпилировано, событие post-build не запускается. Таким образом, в приложении остаются устаревшие библиотеки DLL. Мне еще предстоит найти хорошее решение этой проблемы.

Смежные вопросы