1

J'ai une application web (WebAPI web service) qui se construit sur mon serveur CI. Il construit et publie très bien en utilisant VS2013, un profil de publication de publication sur un système de fichiers (* .pubxml) et la commande ci-dessous de la tâche du serveur CI.MSBuild custom (obfuscate) étape entre construire et publier

MSBuild %ProjectPath%/MyApp.sln /t:Clean,Build /p:Configuration=Release;DeployOnBuild=True;PublishProfile=TAGBIN;VisualStudioVersion=12.0 

Cependant j'ai besoin aussi obscurcir le logiciel, l'obfuscateur (Red Gate Assemblée intelligente), est invoqué par le code XML ci-dessous placé à l'intérieur du fichier csproj.

<UsingTask TaskName="SmartAssembly.MSBuild.Tasks.Build" AssemblyName="SmartAssembly.MSBuild.Tasks, Version=6.0.0.0,&#xD;&#xA;Culture=neutral, PublicKeyToken=7f465a1c156d4d57" /> 
<Target Name="PostBuildEvent" Condition=" '$(Configuration)' == 'Release' "> 
    <SmartAssembly.MSBuild.Tasks.Build ProjectFile="MyApp.saproj" /> 
</Target> 

Cela semble construire et publier bien, mais après avoir inspecté la sortie de ligne de commande, je l'ai remarqué que la publication se produit avant l'obscurcissement.

Évidemment, l'obfuscation doit se produire après la construction, mais avant la publication, est-ce possible?

J'ai essayé quelques choses, y compris l'édition du fichier * .pub.xml pour appeler obfuscate via un noeud 'BuildDependsOn', mais cela provoque l'exécution de l'obfuscation avant la construction.

<BuildDependsOn>   
    Obfuscate; 
    $(BuildDependsOn); 
</BuildDependsOn> 

Il ne semble pas seulement possible de découpler la construction de la publication, la seule option que j'ai en ce moment est de construire deux fois, le second choix les publier des fichiers obfusqués de la première construction.

+0

Votre génération incrémentielle est mal cassé. La raison en est que votre tâche 'SmartAssembly' écrase le fichier qui a été produit lors de l'étape de construction précédente sur place. La logique de la construction incrémentielle est basée sur l'horodatage des fichiers, de sorte que vous verrez un étrange comportement de construction et de reconstruction de votre projet. Je vous suggère de commencer par définir correctement la cible, en séparant les entrées des sorties, et en spécifiant les attributs 'Inputs' et' Outputs' sur l'élément Target. –

+0

La tâche Assemblage intelligent place les exécutables obfusqués dans un dossier distinct et je configure la publication pour prendre les fichiers de ce dossier 'Obfuscated'. Le problème que j'ai est que la publication se produit avant l'obscurcissement, donc il n'y a pas encore de fichiers obfusqués à publier. Je veux juste savoir comment obtenir la publication après l'obfuscation. – RobJohnson

+0

Vous avez écrit que "Cela semble se construire et publier correctement", ce qui implique que l'étape de publication a trouvé des binaires à partir de votre emplacement reconfiguré avec des binaires obfusqués. Si les binaires d'origine créés par CSC ne sont pas surpassés par votre étape personnalisée, alors cela devrait fonctionner. La commande dans MSBuild est facile, utilisez simplement les attributs 'BeforeTargets' et/ou' AfterTargets'. –

Répondre

1

Dans MSBuild 4.0 et versions ultérieures, vous pouvez utiliser BeforeTargets et AfterTargets à control target build order.

Exemple ci-dessous présente une nouvelle étape de construction qui exécute après la compilation, mais avant la publication:

<Target Name="MyNewBuildStep" AfterTargets="CoreBuild" BeforeTargets="Publish"> 
    <Message Text="Executing new build step" /> 
</Target>