Как заставить автоматические номера версий работать в Visual Studio - PullRequest
17 голосов
/ 09 мая 2011

Меня попросили добавить автоматическую нумерацию для сборок в нашей библиотеке кодов. Я менял версии с версии 1.0.0.0 на 1.0. * Вот так:

[сборка: AssemblyVersion ("1.0. *")]

Он генерирует число, как я хотел бы.

Однако библиотека кода содержит сотни библиотек DLL, многие из которых ссылаются друг на друга. Теперь, когда я компилирую некоторые проекты, они жалуются, что версия DLL, необходимая для ссылочного компонента, неверна, и они не будут собираться: (

Как я могу заставить эту работу? Нам это нужно для того, чтобы при компиляции библиотеки DLL в нижней части иерархии нашей библиотеки кода все остальные библиотеки DLL, которые ссылаются на нее, работали правильно, без необходимости перекомпиляции.

Я получаю следующую ошибку:

Error   1   CA0058 : The referenced assembly 'Library1, Version=1.0.4146.17993
, Culture=neutral, PublicKeyToken=d9c65edd2096ad48' could not be found. This assembly
is required for analysis and was referenced by:
D:\Work\Source Code\Library\Library2\bin\Release\Library2.dll.

Версия 1.0.4146.17993 неверна - DLL имеет более высокое значение. Для библиотек DLL установлено значение «Копировать локально», поскольку это требуется для программного обеспечения (не спрашивайте почему) DLL, которая копируется локально, это та, которая имеет больший номер версии, и мы хотим, чтобы она была такой.

До сих пор я пытался изменить ссылки, чтобы установить для флага «Конкретная версия» значение false, но это не помогло.

Ответы [ 5 ]

8 голосов
/ 09 мая 2011

Номера версий, которые VS генерирует при использовании синтаксиса 1.0.*, не обязательно будут увеличиваться в sequence .В документации сказано следующее (выделение добавлено):

Вы можете указать все значения или принять номер сборки по умолчанию, номер редакции или оба, используя звездочку().Например, [assembly: AssemblyVersion ("2.3.25.1")] указывает 2 в качестве основной версии, 3 в качестве вспомогательной версии, 25 в качестве номера сборки и 1 в качестве номера редакции.Номер версии, такой как [assembly: AssemblyVersion ("1.2. ")], задает 1 в качестве основной версии, 2 в качестве вспомогательной версии и принимает номера сборки и ревизии по умолчанию.Номер версии, такой как [assembly: AssemblyVersion ("1.2.15. *")], Задает 1 в качестве основной версии, 2 в качестве вспомогательной версии, 15 в качестве номера сборки и принимает номер версии по умолчанию. Номер сборки по умолчанию увеличивается ежедневно.Номер ревизии по умолчанию является случайным.

Если важно, чтобы вы правильно установили версию, я настоятельно рекомендую использовать стороннее решение.Надстройка Увеличение версии сборки превосходна.

Что вы хотите сделать, так это сами управлять версией сборки.Увеличивайте его только тогда, когда вы вносите критические изменения в открытый интерфейс сборки.Изменение этого атрибута делает вашу сборку несовместимой с другими сборками, которые ссылаются на него, даже если вы ничего не изменили в своем коде.Вместо этого единственное, что вы хотите автоматически увеличить - это сборка file version.В отличие от версии сборки, этот атрибут не проверяется CLR для определения совместимости.

Надстройка приращения версии сборки дает вам детальный контроль над тем, что увеличивается, что вам нужно, чтобы получить это право,Это то, что, вероятно, следует включить в VS для начала.

3 голосов
/ 09 мая 2011

Это на самом деле довольно глубокий вопрос, и я надеюсь, что кто-то ответит на него подробно за вас, но мои 2 цента после того, как вы получите информацию о сборке под контролем, вы должны рассмотреть использование Nuget для управления вашими зависимостями.Таким образом, когда команда A выпускает версию v2 сборки X, все, что они делают, это помещают ее в репозиторий Nuget (вероятно, в общую сетевую папку), и тогда вы можете в основном щелкнуть правой кнопкой мыши

Я бы также порекомендовал взглянуть на http://semver.org/ и использовать семантическое управление версиями, если вы не хотите следовать системе, подобной этой (или устанавливать аналогичный стандарт для вашего магазина), вероятно, это не так.Стоит даже попытаться создать версию ваших DLL, вы просто будете испытывать головную боль.Однако использование Semantic Versioning сделает ваши номера версий на самом деле ЗНАЧИМ.И не только то, что вам хотелось бы отметить на текущей версии.

1 голос
/ 13 февраля 2014

Обратите внимание, что номер редакции не является случайным. Это время дня сборки. Build - это номер дня.

См. VisualStudio: перевод версии сборки на календарную дату

0 голосов
/ 16 мая 2011
   > However, the code library has many hundreds of DLLs,

Если для вас нормально, что все исходные проекты и их сгенерированные dll-ы имеют один и тот же номер версии, вы можете поместить номер версии в один файл, который используется совместно всеми dll, как описано в shared AssemblyInfo.cs . Таким образом, вы (или генератор номеров версий, которые вы используете) должны обновить только один файл, если существует новая версия / версия.

Это не отвечает на ваш первоначальный вопрос, но может быть простым решением проблемы зависимости.

0 голосов
/ 09 мая 2011

удалите свою ссылку (в проекте, который ее использует) и повторите ее, указав тип ссылки на проект.

PS: Если при добавлении ссылки вы выбираете обзор и указываете место, где всегда будет dll, ссылка не будет нарушена!

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