Зависимые сборки не копируются в выходной каталог из-за номера версии зависимой сборки - PullRequest
4 голосов
/ 16 июня 2011

В проекте, над которым я работаю, мы обнаружили странную ошибку.Это было вызвано некоторыми забавными манипуляциями с номерами версий из-за некоторых странных ветвлений, которые мы сделали.Мы решили проблему, но мне интересно, смогу ли я получить объяснение о поведении, которое демонстрирует 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 в выходной каталог?

Ответы [ 2 ]

0 голосов
/ 11 июля 2011

в ответ на ваш вопрос - предполагается, что файлы с меньшими или одинаковыми номерами версий не перезаписывают другие

0 голосов
/ 09 июля 2011

производство более новой сборки с более низкой версией , возможно, сомнительно. что происходит, когда вам нужно сделать новый еще раз?

в основном, если вы делаете новую версию чего-либо, увеличивает номер версии; проблема решена, как вы нашли в своем втором решении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...