Зависимости между проектами C # и C ++, порядок сборки - PullRequest
5 голосов
/ 21 декабря 2011

Если оба проекта Alpha и проект Beta являются проектами C #, мы можем установить, что Beta зависит от Alpha, и это приводит к следующему порядку сборки: 1) Alpha; 2) Beta

Если проект Alpha является проектом C ++, мы не можем добавить ссылку из проекта Alpha в Beta, поскольку Visual Studio 2010 этого не допускает. На самом деле мы можем взломать csproj файл с помощью блокнота, но это не помогает. Но мы можем щелкнуть правой кнопкой мыши по решению, выбрать Project Dependencies и сказать, что Beta зависит от Alpha.

Проблема: MSBuild не учитывает зависимости, установленные в файле sln, и строит проекты в неправильном порядке - 1) Beta; 2) Alpha. Обратите внимание, что Visual Studio соблюдает порядок сборки.

Как установить порядок сборки для MSBuild между C# и C++ проектами в одном решении?

1 Ответ

5 голосов
/ 12 января 2012

Попробуйте добавить ссылку на проект C ++ в проект C # после очистки решения. Это работает для меня, хотя я случайно наткнулся на этот «обходной путь».

Для меня это выглядит так, как будто Visual Studio проверяет продукт сборки ссылочного проекта, и когда он замечает несовместимость, он откажется добавить ссылку. Однако, если продукт для сборки не проверяется (потому что вы очистили решение), Visual Studio с радостью добавляет ссылку.

Я протестировал получившееся решение как в Visual Studio, так и на нашем сервере сборки TFS (который AFAIK использует MSBuild), и зависимости сборки были правильно оценены в обоих случаях.

В вашем вопросе вы также упоминаете, что ручное редактирование файла .csproj не помогло. Я не могу подтвердить это. Я смог добавить следующую ссылку и снова получил положительный результат сборки:

<ProjectReference Include="..\Foo\Foo.vcxproj">
  <Name>Foo</Name>
  <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
  <Private>False</Private>
</ProjectReference>

Я добавляю элемент ReferenceOutputAssembly, потому что эта статья blogs.msdn.com предлагает это. Однако, по моему опыту, сборка также работает без элемента. Статью все еще стоит прочитать, потому что она объясняет , почему MSBuild не учитывает зависимости, определенные в решении.

Для полноты картины: я использую Visual Studio 2010 версии 10.0.40219.1 SP1Rel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...