У меня есть большое решение (~ 450 проектов), где некоторые проекты строятся снова и снова, хотя я ничего не изменил.
Когда я изменяю детализацию сборки на diagnostic
, это говорит:
Проект 'ProjectA' не обновлен. Отсутствует входной файл 'C: \ Src \ Project.Core \ Bin \ Release \ ProjectB.dll'
ProjectA
зависит от ProjectB
, а я собираю конфигурацию Debug
, так почему же Visual Studio проверяет файл ProjectB.dll
в папке Release
? ProjectB.dll
создается и копируется в правильную папку (отладка)!
Путь вывода одинаков для каждого проекта (c # и c ++):
<OutputPath>$(SolutionDir)Bin\$(Configuration)\</OutputPath>
Это всего лишь пример. Несколько проектов в моем решении имеют такое странное поведение. Похоже, что проекты C ++ вызывают это, но у меня нет четких доказательств.
Вот мой Process Monitor анализ доступа к файлам:

ОБНОВЛЕНИЕ 1:
ProjectA (проект C #) ссылается на ProjectB (проект C ++), используя ProjectReference
:
<ProjectReference Include="..\..\ProjectB.vcxproj">
<Project>{F2F4C146-8A98-432B-BB9F-A06C4B4162CF}</Project>
<Name>ProjectB</Name>
</ProjectReference>
ОБНОВЛЕНИЕ 2:
Эта настройка для проектов .NET Core:

Есть ли что-то подобное для проектов, нацеленных на .NET Framework?
ОБНОВЛЕНИЕ 3:
Похоже, код для FastUpToDateCheck
для C # -проектов находится в сборке csproj.dll
. Поскольку это нативная сборка, я не могу заглянуть в код. Жаль.