Совместное использование AssemblyInfo для единообразного управления версиями в решении

Я читал об этой технике: http://blogs.msdn.com/b/jjameson/archive/2009/04/03/shared-assembly-info-in-visual-studio-projects.aspx

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

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

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

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

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

3 ответа

Решение

Первый пункт можно решить с помощью простого текстового редактора, который может обрабатывать несколько файлов одновременно и находить / заменять. Просто откройте все ваши 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: вот оно.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам