Совместное использование AssemblyInfo для единообразного управления версиями в решении
Я читал об этой технике: http://blogs.msdn.com/b/jjameson/archive/2009/04/03/shared-assembly-info-in-visual-studio-projects.aspx
По сути, это означает создание SharedAssemblyInfo.cs с информацией о версиях сборки и добавление этого файла в качестве ссылки на все проекты решения, чтобы фактический файл находился только в 1 месте на диске.
Мой вопрос касается 2 сценариев:
Существующее решение, которое не использует этот механизм: есть ли способ легко добавить ShareAssemblyInfo ко всем проектам? (Допустим, у меня есть решение с 50 проектами).
При создании нового проекта по умолчанию создается новый 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 можно ссылаться на общий файл с информацией о сборке. У Ашиша Джайна есть хорошая запись в блоге об этом: обмен версиями сборки между проектами в решении.
После создания общего файла информации о сборке на уровне решения его инструкции по созданию ссылок на него из проекта:
Щелкните правой кнопкой мыши проект, в который вы хотите добавить файл общей сборки, и выберите "Добавить" -> "Существующий элемент"...
Выберите файл "SharedAssemblyInfo.cs" из папки решения.
Вместо "Добавить" нажмите стрелку рядом с "Добавить" и нажмите "Добавить как ссылку".
Перетащите вниз добавленный связанный файл вместе с AssemblyInfo.cs в той же папке.
Повторите шаги 1 - 4 для всех проектов, для которых вы хотите добавить общий файл сборки.
Я попробовал это, и это работает.
Это не работает для решения, которое имеет как C#, так и F# проекты. C# проект не может ссылаться на общий файл F# и наоборот.
Единственный вариант в этом случае - сделать отдельный проект и сослаться на него из других проектов.
Я создал приложение для автоматического увеличения версии файла.
- Скачать приложение
- добавьте следующую строку в командную строку события pre-build
C:\temp\IncrementFileVersion.exe $(SolutionDir)\Properties\AssemblyInfo.cs Построение проекта Для простоты приложение выдает сообщения только в случае ошибки, чтобы убедиться, что она работает нормально, вам нужно проверить версию файла в "Информация о сборке"
Примечание. Чтобы заполнить поля, вам придется перезагрузить решение в Visual Studio для кнопки "Информация о сборке", однако ваш выходной файл будет иметь обновленную версию.
Для предложений и запросов, пожалуйста, напишите мне по адресу telson_alva@yahoo.com