2010-05-28 61 views
3

J'ai donc un CommonAssemblyInfo.cs lié à tous les projets de ma solution et généré dynamiquement par mes scripts rake/albacore qui n'est pas vérifié dans le contrôle de source.Versioning CommonAssemblyInfo.cs et MSBuild

J'ai aussi un CommonAssemblyInfo.cs.local à utiliser quand il n'y a pas de ruby ​​disponible, principalement pour être utilisé par les développeurs.

Est-il possible d'avoir une tâche msbuild ou quelque chose qui s'exécute avant toute autre compilation de projet qui copiera CommonAssemblyInfo.cs.local à CommonAssemblyInfo.cs avant d'essayer de compiler ma solution? Je déteste devoir avoir une commande que vous devez juste connaître et taper afin d'ouvrir et d'installer la solution dans Visual Studio.

MISE À JOUR Alors je me suis retrouvé à l'aide d'un fichier batch comme une solution large événement pré-construction comme décrit ici: Solution-wide pre-build event?, il vérifie si CommonAssemblyInfo.cs existe et sinon des copies CommonAssemblyInfo.cs.local à CommonAssemblyInfo .cs en utilisant simplement un fichier batch simple.

Répondre

3

C'est la solution que j'ai trouvée.

J'ai chaque projet dans le lien de la solution à un CommonAssemblyInfo.cs qui est automagically généré pour moi par mes scripts de construction (rake + albacore).

Étant donné que je ne peux pas vérifier CommonAssemblyInfo.cs dans le contrôle de code source, je crée un CommonAssemblyInfo.cs.local.

Solution simple: créez go.bat qui copie CommonAssemblyInfo.cs.local dans CommonAssemblyInfo.cs que les développeurs doivent exécuter la première fois qu'ils vérifient le projet avant d'ouvrir la solution dans VS. Pour purement raisons politiques, si je l'avais fait ce peuple aurait eu hissy crises sur moi de faire des choses "non standard". La solution complexe suit:

J'ai créé un projet dans la solution appelée PreBuild dont dépend chaque projet de la solution. Cela force l'ordre de construction à être tel que ce projet est construit en premier. Ce projet contient un événement pré-construction qui appelle le fichier batch suivant:

echo verifying CommonVersionInfo.cs exists 
cd 
IF NOT EXIST ..\..\..\CommonAssemblyInfo.cs COPY ..\..\..\CommonAssemblyInfo.cs.local ..\..\..\CommonAssemblyInfo.cs 

Alors maintenant, les développeurs qui choisissent de garder la tête dans le sable peuvent extraira le projet et béatement l'ouvrir dans VS pas au courant que toute construction les scripts existent du tout.

0

Parlez-vous de la compilation dans l'EDI VS, ou de la compilation par team build? Si vous parlez de build d'équipe, vous pouvez utiliser l'événement "AfterGet" comme un endroit pour utiliser la tâche msbuild "copy" standard. Si vous parlez de l'IDE VS, vous pouvez toujours utiliser la tâche msbuild "copy".

+0

Je parlais de la version de VS IDE. Je voulais un événement de pré-construction de large solution que j'ai implémenté en utilisant ceci: http://stackoverflow.com/questions/2295454/visual-studio-solution-wide-pre-build-event –