Совместное использование AssemblyInfo для единообразного управления версиями в решении - PullRequest
66 голосов
/ 21 июля 2011

Я читал об этой технике: Информация об общей сборке в проектах VS - блог JJameson

По сути, это означает создание SharedAssemblyInfo.cs с информацией о версиях сборки и добавление этого файла в качестве ссылки на все проекты решения, чтобы фактический файл находился только в 1 месте на диске.

Мой вопрос касается 2 сценариев:

  1. Существующее решение, которое не использует этот механизм: есть ли способ легко добавить ShareAssemblyInfo ко всем проектам? (допустим, у меня есть решение с 50 проектами).

  2. При создании нового проекта по умолчанию создается новый AssemblyInfo.cs. Однако я также хотел бы автоматически связать с SharedAssemblyInfo.

Есть ли какое-то решение для этого? что такое обычная практика?

Ответы [ 4 ]

58 голосов
/ 24 мая 2013

Можно ссылаться на общий файл информации о сборке в VS 2010. У Ашиша Джайна есть хороший пост в блоге об этом: Обмен версиями сборки между проектами в решении .

После создания файла общей информации о сборке на уровне решения его инструкции по связыванию с ним из проекта:

  1. Щелкните правой кнопкой мыши проект, в который вы хотите добавить Shared файл сборки и выберите Добавить -> Существующий элемент ...

  2. Выберите файл «SharedAssemblyInfo.cs» из папки решения.

  3. Вместо «Добавить» нажмите стрелку рядом с «Добавить» и нажмите «Добавить как». Ссылка »

  4. Перетащите вниз добавленный связанный файл вместе с AssemblyInfo.cs в та же папка.

  5. Повторите шаги 1 - 4 для всех проектов, для которых вы хотите добавить общий файл сборки.

Я пробовал это, и это работает.

50 голосов
/ 21 июля 2011

Первый пункт можно решить с помощью простого текстового редактора, который может обрабатывать несколько файлов одновременно и находить / заменять. Просто откройте все ваши csproj в нем и замените строку <Compile Include="Properties\AssemblyInfo.cs" /> на

<Compile Include="..\SharedAssemblyInfo.cs">
  <Link>Properties\SharedAssemblyInfo.cs</Link>
</Compile>

В качестве альтернативы вы можете написать такую ​​утилиту:

var files = Directory.GetFiles(yourSolutionDir, "*.csproj", SearchOption.AllDirectories);
foreach (var f in files) {
  string contents = File.ReadAllText(f);
  string result = contents.Replace("<Compile Include=\"Properties\\AssemblyInfo.cs\" />", putSecondStringHere_ItIsJustTooLong); // :)
  File.WriteAllText(f, contents);
}

Что касается второго вопроса ... Вы можете взглянуть на Шаблоны пользовательских проектов Visual Studio , но я не уверен, что оно того стоит. Вам следует написать тест IMO, который проверит это. Это будет намного проще, а результат практически одинаков.

UPD: о написании тестов для проверки файлов решений / проектов на соответствие некоторым пользовательским правилам. По сути, формат sln / csproj достаточно прост, чтобы его можно было проанализировать без особых усилий. Так что если вы хотите, чтобы SharedAssemblyInfo.cs был связан с каждым проектом - просто проанализируйте csproj и проверьте это. Затем поместите эту проверку на сервер сборки и запускайте ее при каждой сборке. У нас есть такая система, работающая в настоящее время, и ее написание стоит около двух дней, но сэкономило нам намного больше (у нас есть более сложные правила и проект с несколькими решениями, так что это стоило усилий).

Я не буду сейчас подробно описывать эту проверку здесь (она не так коротка), но я скоро напишу в блоге об этом - скорее всего, до конца этой недели. Так что, если вам интересно - просто проверьте мой блог в ближайшее время :)

UPD: Здесь это.

0 голосов
/ 15 февраля 2019

Это не работает для решения с проектами C # и F #.c # проект не может ссылаться на общий файл f # и наоборот.

Единственный вариант в этом случае - создать отдельный проект и сослаться на него из других проектов

0 голосов
/ 23 июня 2017

Я создал приложение для автоматического увеличения версии файла.

  1. Скачать Заявка
  2. добавить следующую строку в командную строку события перед сборкой

C: \ temp \ IncrementFileVersion.exe $ (SolutionDir) \ Properties \ AssemblyInfo.cs Постройте проект Для простоты приложение выдает сообщения только в случае ошибки, чтобы убедиться, что она работает нормально, вам нужно проверить версию файла в «Сведениях о сборке»

Примечание. Чтобы заполнить поля, вам придется перезагрузить решение в Visual Studio для кнопки «Информация о сборке», однако ваш выходной файл будет иметь обновленную версию.

Для предложений и запросов, пожалуйста, напишите мне по адресу telson_alva@yahoo.com

...