Общая информация 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]