В проекте, над которым я работаю, мы обнаружили странную ошибку.Это было вызвано некоторыми забавными манипуляциями с номерами версий из-за некоторых странных ветвлений, которые мы сделали.Мы решили проблему, но мне интересно, смогу ли я получить объяснение о поведении, которое демонстрирует msbuild.Такое же поведение наблюдалось при сборке с использованием Nant и Visual Studio 2008.
Настройка: Номера версий для сборок управляются общим файлом, который связан со свойствами всех сборок.Это сделано, чтобы держать их всех в синхронизации друг с другом.Тем не менее, есть некоторые сборки, которые мы предварительно скомпилировали и собирали только изредка.Они используются для сериализации и частично генерируются из XSD.Поскольку сериализация не меняется так часто, их, очевидно, не нужно перестраивать так часто.
Ситуация: Номер версии в связанном файле обновлен.После этого предварительно скомпилированные сборки были перестроены из-за изменения сериализации.После этого было решено, что нужен более низкий номер версии.Общий связанный файл был снова обновлен, но теперь он имеет меньший номер версии, чем раньше.
Проблема: После последнего обновления номера версии сборка перестала копировать некоторые dll-файлы в выходной каталог одного конкретного проекта и перестала работать должным образом.Мы назовем этот проект A. A зависит от сборки B, а сборка B зависит от сборки C, а сборка C зависит от одного из предварительно скомпилированных dll.Это похоже на длинную цепочку, но эта цепочка является ключевой.Другой ключевой факт заключается в том, что A не имеет прямой ссылки на C. Когда A создается перед понижением, номер версии C копируется в выходной каталог.Эта проблема заключается в том, что после уменьшения номера версии C больше не копируется в выходной каталог.Было три способа исправить эту проблему.Если какое-либо из этих изменений будет сделано, тогда C будет правильно скопирован в выходной каталог.
- Добавьте прямую ссылку на C в проекте A.
- Номер версии вернется обратно или будет выполненбыть выше, чем это было при сборке предварительно скомпилированных dll.
- Пересборка предварительно собранных сборок с обновлением номера версии.
Третий вариант заключался в том, как решить проблему.Мой вопрос - это ошибка в msbuild или предполагаемое поведение?Какова будет цель этого поведения?Почему вместо создания ошибки он просто не копирует dll в выходной каталог?