Premier point pourrait être résolu avec un simple éditeur de texte capable de traiter plusieurs fichiers à la fois et trouver/remplacer. Il suffit d'ouvrir l'ensemble de vos csproj en elle et remplacer les cordes <Compile Include="Properties\AssemblyInfo.cs" />
avec
<Compile Include="..\SharedAssemblyInfo.cs">
<Link>Properties\SharedAssemblyInfo.cs</Link>
</Compile>
Mon éditeur de choix est EditPad Pro.
Sinon, vous pouvez simplement écrire absolument trivial utilitaire tel que:
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);
}
Quant à la deuxième question... Vous pouvez prendre un coup d'oeil à Visual Studio de projet personnalisé de modèles , mais je ne suis pas sûr que ça en vaut les efforts. Vous devriez OMI test d'écriture qui va vérifier cela à la place. Il sera beaucoup plus simple et le résultat est presque le même.
UPD: à Propos de l'écriture de tests pour la vérification de la solution/les fichiers de projet à l'encontre de certaines règles personnalisées. Fondamentalement, la sln/csproj format est assez simple pour être parseable sans trop d'efforts. Donc, si vous voulez avoir SharedAssemblyInfo.cs
lié à chaque projet - juste parse csproj et vérifier. Puis mettre pion dans votre serveur de build et de l'exécuter sur chaque build. Nous avons un tel système de travail actuellement, et il en coûte quelque chose à propos de deux jours pour écrire, mais nous a sauvé beaucoup d'autres (que nous avons il y a plus de règles complexes et multi-projet de solution, alors il valait la peine d'efforts).
Je ne vais pas écrire à propos de cette vérification en détail ici et maintenant (ce n'est pas que court), mais je vais écrire billet de blog à ce sujet bientôt, sans doute jusqu'à la fin de cette semaine. Donc, si vous êtes intéressés, il suffit de cocher mon blog bientôt :)
UPD: Ici il est.