У меня есть большое решение VS2010, которое содержит несколько проектов на C #. Один из этих проектов использует библиотеку C ++ (нативную, иначе неуправляемую) через P / Invoke. Чтобы убедиться, что все собирается правильно, я включил указанный проект C ++ в то же решение. Вот тут-то и начинаются проблемы.
Короче говоря : MSBuild таинственным образом удаляет некоторые выходные файлы, в то время как VS2010 собирается правильно.
,
Длинная история :
Ранее (VS2005 / 2008) я бы использовал изящную функцию под названием «Зависимости проекта». Это то, что позволяет вам выбирать, от каких конкретных проектов зависит тот или иной проект, так что среда обязательно создаст их в первую очередь.
VS2010, однако, переместился в сторону MSBuild, и теперь зависимости проекта просто не работают. Они просто нет. (см. этот вопрос , например)
Теперь, чтобы убедиться, что мой проект C ++ собирается до того, как он его потребит, мне нужно «добавить ссылку». Итак, я сделал это. И все вроде нормально.
Но затем я иду в командную строку и запускаю MSBuild для создания того же решения. И опять все строит нормально. Но когда я смотрю в выходную папку, вывода проекта C ++ там нет!
Вывод консоли MSBuild ясно показывает, что проект C ++ действительно был построен в какой-то момент. И я даже вставил некоторые операторы " dir bin \ MYPROJNAME.dll " в качестве шагов после сборки в некоторые проекты, чтобы посмотреть, есть ли там файлы - и они ! Здесь - скриншот окна командной строки. Красным кружком обозначен момент, когда файлы находятся там (вверху), а затем момент отсутствия файлов (внизу).
Еще одна странная вещь заключается в том, что проект, по-видимому, создается дважды. Посмотрите на красное подчеркивание на скриншоте - это второе сообщение о создании этого же проекта (первое сообщение, вместе со всеми выходными данными компилятора, было вверх по экрану).
Похоже, что это второе событие сборки - это то, что вызывает удаление файлов: когда я вообще отключил сборку этого проекта (через свойства решения), он был собран только один раз, и файлы были в конце. Я мог бы назвать это «решением», но затем оно ломается в самой Visual Studio: VS просто не создает проект.
Еще один способ исправить это - удалить «Ссылку на проект» из потребляющего проекта C #. Тогда MSBuild соберет проект C ++ только один раз, и файлы будут там. Но затем он ломается в другом месте: изменения в проекте C ++ не вызовут перестройку потребляющего проекта C #.
Итак, вопрос : как мне сделать так, чтобы MSBuild не удалял чокнутые файлы?