У меня есть решение с несколькими проектами. Я пытаюсь оптимизировать файлы AssemblyInfo.cs, связав один информационный файл сборки для всего решения. Каковы лучшие практики для этого? Какие атрибуты должны быть в файле решения, а какие специфичны для проекта / сборки?
Изменить: Если вы заинтересованы, есть дополнительный вопрос Каковы различия между AssemblyVersion, AssemblyFileVersion и AssemblyInformationalVersion?
.net
assemblies
attributes
assemblyinfo
Якуб Штурц
источник
источник
AssemblyCultureAttribute
Заслуживает лучшего объяснения. Лучше всего, чтобы атрибут полностью отсутствовал (если это не спутниковая сборка). При использовании спутниковых сборок в больших масштабах может потребоваться три, а не два уровня информационных файлов сборок (глобальная сборка, основная сборка и вспомогательная сборка, в которой в этом случае указывается только культура).В моем случае мы создаем продукт, для которого у нас есть решение Visual Studio с различными компонентами в их собственных проектах. Общие атрибуты уходят. В решении имеется около 35 проектов и общая информация о сборке (CommonAssemblyInfo.cs), которая имеет следующие атрибуты:
Другие атрибуты, такие как AssemblyTitle, AssemblyVersion и т. Д., Мы предоставляем для каждой сборки. При сборке сборки оба AssemblyInfo.cs и CommonAssemblyInfo.cs встраиваются в каждую сборку. Это дает нам лучшее из обоих миров, где вы можете захотеть иметь общие атрибуты для всех проектов и конкретные значения для некоторых других.
Надеюсь, это поможет.
источник
<Compile Include="$(MSBuildThisFileDirectory)..\Common\CommonAssemblyInfo.cs"/>
директиву MSBuild, которая может даже находиться в общемCommon.targets
файле. Yay код повторного использования.Решение, представленное @JRoppert, почти такое же, как и у меня. Единственное отличие состоит в том, что я поместил следующие строки в локальный файл AssemblyInfo.cs, поскольку они могут различаться в зависимости от каждой сборки:
Я также (как правило) использую одну общую информацию о сборке для каждого решения, предполагая, что одно решение представляет собой одну линейку продуктов / выпускаемый продукт. Файл общей информации о сборке также имеет:
Который будет устанавливать значение «ProductVersion», отображаемое в проводнике Windows.
источник
Задачи сообщества MSBuild содержат пользовательскую задачу AssemblyInfo, которую вы можете использовать для создания вашего assemblyinfo.cs. Это требует небольшого ручного редактирования ваших файлов csproj, но оно того стоит.
источник
По моему мнению, использование GlobalAssemblyInfo.cs - это больше проблем, чем оно того стоит, потому что вам нужно изменить каждый файл проекта и не забывать изменять каждый новый проект, тогда как вы получаете AssemblyInfo.cs по умолчанию.
Для изменений в глобальных ценностях (например, Компания, Продукт и т. Д.) Изменения, как правило, настолько редки и просты в управлении, что я не думаю, что DRY должно быть соображением. Просто запустите следующий скрипт MSBuild (зависит от пакета расширений MSBuild ), если вы хотите вручную изменить значения во всех проектах как разовые:
источник
Чтобы поделиться файлом между несколькими проектами, вы можете добавить существующий файл в виде ссылки.
Для этого добавьте существующий файл и нажмите «Добавить как ссылку» в селекторе файлов. (источник: free.fr )
Что касается того, что поместить в общий файл, я бы предложил поместить вещи, которые будут совместно использоваться в сборках. Такие вещи, как авторское право, компания, возможно, версия.
источник
Использование одного файла AseemblyInfo.cs для нескольких проектов не рекомендуется. Файл AssemblyInfo содержит информацию, которая может иметь отношение только к этой конкретной сборке. Две наиболее очевидные части информации - это
AssemblyTitle
иAssemblyVersion
.Лучшим решением может быть использование
targets
файла, который обрабатывается MSBuild, чтобы «внедрить» атрибуты сборки в несколько проектов.источник
Одна вещь, которую я нашел полезной, - это генерирование элементов AssemblyVersion (и т. Д.) Путем применения замены токенов на этапе предварительной сборки.
Я использую TortoiseSVN, и легко использовать его ,
SubWCRev.exe
чтобы включить шаблонAssemblyInfo.wcrev
вAssemblyInfo.cs
. Соответствующая строка в шаблоне может выглядеть примерно так:Третий элемент - это номер редакции. Я использую четвертый элемент, чтобы проверить, что я не забыл зафиксировать какие-либо новые или измененные файлы (четвертый элемент - 00, если все в порядке).
Кстати, добавьте
AssemblyInfo.wcrev
в свой контроль версий и игнорируйте,AssemblyInfo.cs
если вы используете это.источник