Общая информация AssemblyInfo для единообразного управления версиями в решении

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

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

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

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

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

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

Ответ 1

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

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

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

UPD: Здесь это.

Ответ 2

В VS 2010 можно связать с общим файлом информации об ассамблее. Ashish Jain имеет хорошее сообщение в блоге об этом: Совместное использование версии сборки в проектах в решении.

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

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

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

  • Вместо "Добавить" нажмите на стрелку рядом с надписью "Добавить" и нажмите "Добавить как" Ссылка "

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

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

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

Ответ 3

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

  • Загрузить Applicaiton
  • добавьте следующую строку для предварительной сборки командной строки событий

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

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

Для предложений и запросов, пожалуйста, напишите мне по адресу [email protected]