Есть ли серьезные основания для разрешения соответствие AssemblyFileVersion и AssemblyVersion?

Жандарм имеет AvoidAssemblyVersionMismatchRule со следующим описанием:

Это правило проверяет что [AssemblyVersion] соответствия [AssemblyFileVersion] когда оба присутствуют в блоке. Наличие различных номеров версий в обоих атрибутах может сбивать с толку, после того как приложение развертывается.

Например, это правило предупредило бы о Microsoft System.dll который имеет следующие атрибуты:

[assembly: AssemblyVersion("2.0.0.0")]
[assembly: AssemblyFileVersion("2.0.50727.3053")]

Я не соглашаюсь с правилом Жандарма. Следующий это лишило бы возможности на Вас, используют схему управления версиями, подобную той, используемой Microsoft, которая является

  • обновление AssemblyFileVersion на каждой сборке,
  • изменение AssemblyVersion только на открытом интерфейсе или в других отношениях существенных изменениях,
  • удостоверьтесь это AssemblyVersion и AssemblyFileVersion совместно используйте общий префикс,

и я думаю, что эта схема управления версиями является причиной дизайна, почему было сделано возможным дифференцироваться между AssemblyVersion и AssemblyFileVersion во-первых.

Я не могу придумать причину, почему принуждение обоих атрибутов сборки быть равным является хорошей практикой, но возможно Вы можете! Я интересовался бы Вашими мнениями.

Если действительно не будет никакого серьезного основания, то я скоро предложу, чтобы разработчики Жандарма изменили правило на

Это правило проверяет что [AssemblyVersion] и [AssemblyFileVersion] имейте общий, непустой префикс, когда оба будут присутствовать в блоке.

10
задан 5 revs, 2 users 100% 19 August 2015 в 17:36
поделиться

3 ответа

Согласен, если они должны совпадать, то не нужно будет иметь два разных атрибута для начала! Но как правило говорит: это может быть запутано.

Козелсверсия больше похоже на «версию всего вашего приложения», а FileVersion является версией отдельного файла. Если ваше приложение имеет несколько сборок, которые имеют разные циклы обновления по какой-либо причине (например, плагины, которые обновляются отдельно, но требуют определенного основного выпуска основного приложения), то вы можете дать каждому другому FileVersion, но иметь общую счету.

Кроме того, иногда это действительно неудобно обновлять обновление COMPARYVERION (например, рабочие процессы SharePoint и веб-частей - это пита для обновления, поскольку они ожидают, что указанная AssockerversionSersion), поэтому там часто используется fileversion.

9
ответ дан 3 December 2019 в 23:50
поделиться

Забудьте о создании событий, таких как нажатия клавиш. Хотя можно (различными непортящимися способами) создавать события и направлять их в систему обработки событий, это вызовет только соответствующие функции обработчика событий; он не заставляет браузер выполнять действия по умолчанию для создаваемого пользователем действия, например нажатие клавиши или щелчка мыши.

В любом случае, поведение, о котором вы говорите с сбросом на побег, является IE причудой: ни в одном другом браузере Escape не имеет никакого эффекта, и даже в IE это ненадежно. В частности, в обычной форме один Побег пресс теряет изменения с момента последнего фокуса, а два Побега пресса в строке сбрасывают всю форму до начальных значений. Однако если форма имеет в себе < input type = «reset» > , одно нажатие Escape сбрасывает форму и фокусирует кнопку сброса. Это еще больше облегчает случайную потерю всего введенного и является еще одной хорошей причиной не включать кнопку сброса в формы.

Таким образом, если требуется восстановить исходные значения, можно вызвать form.reset () . Если требуется сбросить только одно поле, можно задать значение input.value = input.defureValue (или input.checked = input.defureChecked для флажков/радиоприемников и аналогично defureSelected для параметров).

Если, однако, вы хотите, чтобы значение, которое присутствовало во время последней фокусировки поля, так как IE ведет себя, когда нет кнопки сброса, вам придется сделать некоторые переменные запоминания, например:

var undonevalue= $('#undoable').val();
$('#undoable').focus(function() {
    undonevalue= $('#undoable').val();
});
$('#undoer').click(function() {
    $('#undoable').val(undonevalue);
});
-121--4746504-

Согласовано, это глупое правило. Невозможно развернуть обновление исправления ошибок для сборки с сильным именем, когда вы следуете за ним. В противном случае существует несколько причин не делать их одинаковыми, если фактически необходимо изменить [AssemblyVersion]. Возможно, вы не должны использовать этот инструмент, когда исправляете ошибки. Иронично.

4
ответ дан 3 December 2019 в 23:50
поделиться

Я думаю, что правило имеет смысл во многих сценариях, поскольку .NET Framework по существу рассматривает две сборки с той же сборкой для взаимозаменяемых.

Итак, например, старая версия находится в кэше загрузки, не будет автоматически перезаписан новой версией, отличающейся только в сборке Cileversion.

Это может быть запутано для среднего разработчика, отсюда и правило.

Конечно, если вы знаете, что вы делаете и понимаете компромиссы, вы можете игнорировать правило.

0
ответ дан 3 December 2019 в 23:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: