Ошибка MS Build CopyLocal True - PullRequest
       28

Ошибка MS Build CopyLocal True

1 голос
/ 18 января 2012

У меня есть решение с более чем 100 c # проектами.Мы всегда делаем опцию CopyLocal false для всех сборок, чтобы избежать некоторых проблем.Иногда некоторые разработчики проверяют файлы проекта с опцией CopyLocal True для сборок.Это создает проблемы при запуске программного обеспечения позже

Возможно ли сбой при сборке, если для параметра CopyLocal установлено значение True?

Мы автоматизируем процесс сборки с помощью MS Build и Cruise control net.

1 Ответ

1 голос
/ 18 января 2012

Краткий ответ: Да!

Я не эксперт по MSBuild, но я знаю, как это сделать с помощью NAnt.Это довольно просто, и не должно быть большой разницы в достижении того же результата с MSBuild.Это процесс:

  1. Анализ файла решения, чтобы получить путь ко всем файлам проекта, содержащимся в решении.К сожалению, файлы .sln не являются xml, но они в любом случае структурированы.
  2. Для каждого файла проекта: проанализируйте файл проекта, чтобы получить все ссылки на проект, и проверьте, чтобы 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.

...