Когда использовать в файлах проекта?

Резюме:

Проекты строятся в неправильном порядке в visual studio и управляемых проектах C++ и C#

Описание:

У меня есть массивный (100+ проектов) файл решения, который строит несколько проектов в неправильном порядке. Файл решения содержит следующие типы проектов:

  • native C/C++
  • Managed C++
  • Managed C#

Решение содержит все необходимые зависимости между различными типами проектов. Итак, когда я собираю из командной строки (используя MSBuild), возникает проблема. Зависимости для управляемых проектов (как C++, так и C#) собираются в неправильном порядке. Например, проект не собирается, потому что отсутствует управляемая зависимость. Например, в управляемом C++ файле будет декларация using, которая приведет к ошибке:

#using 

поскольку foo.dll еще не существует.

Что означает, что foo.dll должна была быть собрана раньше, но не была. Как я уже говорил, зависимости правильно установлены в файле решения. Например, если foo зависит от baz, то в файле решения есть следующее...

Project("{C4ABA494-43D0-400A-9917-20E167A12CFD}") = "Foo", "...\Foo.vcxproj", "{5A42640E-9E0A-442B-8A40-AA91AD5444AC}"
    ProjectSection(ProjectDependencies) = postProject
        ...
        {2CE32AE0-B129-40BA-B06E-A628FA149AB3} = {2CE32AE0-B129-40BA-B06E-A628FA149AB3}
    EndProjectSection
EndProject
...
Project("{C4ABA494-43D0-400A-9917-20E167A12CFD}") = "baz", "...\baz.csproj", "{2CE32AE0-B129-40BA-B06E-A628FA149AB3}"
    ProjectSection(ProjectDependencies) = postProject
        ...
    EndProjectSection
EndProject

Таким образом, в файле решения зависимость установлена правильно. Но зависимость в проекте Foo.vcxproj выражается только директивой #using. Я прочитал в блоге visual studio, что существует известная ошибка в упорядочивании проектов в msbuild. http://blogs.msdn.com/b/visualstudio/archive/2010/12/21/incorrect-solution-build-ordering-when-using-msbuild-exe.aspx

Их решение заключается в том, чтобы добавить элемент с названием к моим проектам, например, так:

 
    false 

Так вот, мой вопрос: мне нужно сделать это ТОЛЬКО для моих управляемых C++ проектов? Или я должен сделать это для управляемых C++ и C# проектов? (Я вроде как считаю, что для C# проектов это не нужно, так как их зависимости явные)

Примечание: я пробовал ставить это для ВСЕХ проектов в моей сборке, и это не сработало, так как я получил много странных ошибок сборки в моих родных проектах...

Спасибо за любой ответ на это.

6
задан C Johnson 3 January 2012 в 19:02
поделиться