Стиль проекта MsBuild SDK: зависимости проекта иногда не работают

В решении у меня есть зависимый проект, настроенный как проекты в стиле SDK:

  • Proj A отвечает за выполнение некоторых рутинных задач в качестве задачи MsBuild.
  • Проект Proj B, требующий такой обработки для корректной компиляции
  • Задача настроена в Проекте Б как цель MsBuild с атрибутом BeforeTargets = "CoreCompile".

Исходя из этого, Proj A должен быть полностью скомпилирован перед запуском задачи по компиляции Proj B. Оба проекта имеют разные цели компиляции (NetStandard20 и Net462). Поэтому я не мог сделать прямую ссылку, но установил зависимость проекта для всего решения, установив для свойства AddSyntheticProjectReferencesForSolutionDependencies значение false (в противном случае msbuild пытается сделать зависимость проекта принудительной).

В этой настройке MsBuild иногда дает сбой при компиляции: Proj A начал компиляцию, но не завершился вовремя, когда Proj B запустил задачу. MSBuild запускается на машине CI с ключом / m.

Любые идеи приветствуются.


person Evgeny Burmakov    schedule 24.09.2018    source источник


Ответы (1)


В этом случае вам действительно нужна синтетическая ссылка на проект, но в настоящий момент в MSBuild есть тонкая проблема, которая создает некоторые проблемы для ссылок на проекты, если проект, имеющий зависимость, является многопрофильным. Это исправлено в версии 15.9.

Пожалуйста, попробуйте его в предварительной версии Visual Studio 15.9 (на момент написания: 15.9 Preview 2).

Если вы не хотите ждать, вы можете сами добавить аналогичную ссылку на проект в файл csproj:

<ItemGroup>
  <ProjectReference Include="..\other\project.csproj"
    ReferenceOutputAssembly="false"
    LinkLibraryDependencies="false"
    CopyLocal="false"
    SkipGetTargetFrameworkProperties="true"
    GlobalPropertiesToRemove="TargetFramework"
    />
</ItemGroup>
person Martin Ullrich    schedule 24.09.2018
comment
Спасибо, у меня такая зависимость проекта работает. Также встречался с ситуацией, когда VS с SDK-проектами (решение с примерно 150 проектами) потребляют вдвое больше памяти (2,5 ГБ против 1,2 ГБ в классическом стиле). Вы случайно не знаете, есть ли какие-нибудь уловки, чтобы его уменьшить или в ближайшее время его улучшат? - person Evgeny Burmakov; 25.09.2018
comment
Я не знаю, но сообщаю о проблеме на странице github.com/dotnet/project-system и посмотрите, сможет ли вам помочь один из членов команды системы проектов - person Martin Ullrich; 25.09.2018
comment
Я пробовал его на производстве и получил значок предупреждения для таких ссылок. Я предполагаю это, потому что цели проекта разные. Есть ли у вас свойство игнорировать предупреждения об искусственных ссылках? - person Evgeny Burmakov; 26.09.2018
comment
Я обнаружил, что добавление ReferenceOutputAssembly = false приводит к предупреждению об ошибке, но до сих пор не нашел решения для ее скрытия. - person Evgeny Burmakov; 27.09.2018