Краткий ответ: Да!
Я не эксперт по MSBuild, но я знаю, как это сделать с помощью NAnt.Это довольно просто, и не должно быть большой разницы в достижении того же результата с MSBuild.Это процесс:
- Анализ файла решения, чтобы получить путь ко всем файлам проекта, содержащимся в решении.К сожалению, файлы .sln не являются xml, но они в любом случае структурированы.
- Для каждого файла проекта: проанализируйте файл проекта, чтобы получить все ссылки на проект, и проверьте, чтобы CopyLocal = True.Если есть какие-либо: сбой.Поскольку файлы .csproj имеют формат xml, это легко сделать с помощью выражения XPath.Для ссылок на сборку с CopyLocal, установленным на
True
:
count(/Project/ItemGroup/Reference/Private[text()="True"])
Для ссылок на проект:
count(/Project/ItemGroup/ProjectReference/Private[text()="True"])
Еслирезультат больше 0, у вас есть ссылки с CopyLocal, установленным на True
, поэтому не удается построить. Подводный камень : Помните, что CopyLocal также считается True
, если отсутствует узел Private
.