Visual Studio (2008) зависимости проекта в смешанном режиме. C-sharp проект зависит от C ++ DLL, но C ++ DLL не перестраивается - PullRequest
2 голосов
/ 24 октября 2008

У меня есть решение Visual Studio 2008 с двумя проектами. C ++ DLL и приложение Csharp.

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

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

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

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

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

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

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

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

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

Ответы [ 5 ]

1 голос
/ 06 ноября 2008

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

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

0 голосов
/ 12 ноября 2008

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

0 голосов
/ 24 октября 2008

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

0 голосов
/ 06 ноября 2008

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

0 голосов
/ 24 октября 2008

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

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

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

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

...