Проблема зависимости с MSBuild 4.0 при выполнении DllImport из C # в неуправляемую библиотеку C ++ - PullRequest
1 голос
/ 15 июня 2010

Явная установка зависимости в VS2010 между неуправляемым проектом C ++ и проектом C # приветствуется в VS2010, но зависимость игнорируется в MSBuild 4.0.

Невозможно добавить ссылку на неуправляемый проект C ++ из проекта C #, afaik.

Как обеспечить правильный порядок сборки, если решение содержит неуправляемые и управляемые проекты?

1 Ответ

2 голосов
/ 26 июля 2011

MSBuild содержит ошибку и неправильно учитывает зависимости проекта, добавленные на уровне решения. Взгляните на http://social.msdn.microsoft.com/Forums/en-US/msbuild/thread/80cc6447-b720-4806-8395-7c257b207613/ и https://connect.microsoft.com/VisualStudio/feedback/details/613284/msbuild-4-does-not-respect-build-order-when-building-a-solution

Сообщение Microsoft на странице подключения указывает на то, что это ошибка в 64-разрядной версии MSBuild. Попробуйте переключиться на 32-разрядную версию, чтобы посмотреть, решит ли это проблему.

Если вы не можете этого сделать или это не работает, есть два других варианта. Ни один из них не идеален.

Первый вариант - вручную отредактировать файл SLN и изменить порядок отображения проектов в файле в соответствии с желаемым порядком сборки. Я полагаю, что решение Виктора было бы гораздо лучшей идеей, поскольку дополнительные изменения в файле решения могли бы в конечном итоге перезаписать изменения снова.

Второй вариант - вручную экспортировать «метапроект» MSBuild для решения, напрямую отредактировать порядок сборки и добавить любые другие необходимые вам настройки. Судя по тому, что я прочитал, даже в Microsoft они не компилируют решения "собачья еда" - вместо этого они полностью избегают их во время сборок и вместо этого используют собственные файлы MSBuild.

Чтобы сгенерировать metaproj, установите для переменной среды MSBuildEmitSolution значение 1. После запуска MSBuild для решения вы увидите файл «.metaproj» в том же каталоге - он содержит скрипт, который MSBuild создает в памяти для компиляции решение. Вы должны иметь возможность внести необходимые изменения, зарегистрировать его, а затем настроить сервер сборки для его компиляции.

Эта проблема исчезнет в следующем выпуске Visual Studio. На странице Microsoft Connect есть сообщение от Microsoft о том, что это будет исправлено в следующем выпуске, и, по слухам, они избавляются от файлов .sln и заменяют их соответствующими проектами MSBuild.

...