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