I have a web application (WebAPI web service) that is building on my CI server. It builds and publishes fine using VS2013, a publish to file system publish profile (*.pubxml) and the below command from the CI server task.
MSBuild %ProjectPath%/MyApp.sln /t:Clean,Build /p:Configuration=Release;DeployOnBuild=True;PublishProfile=TAGBIN;VisualStudioVersion=12.0
However I also need to obfuscate the software, the obfuscator (Red Gate Smart Assembly), is invoked via the below xml placed inside the csproj file.
<UsingTask TaskName="SmartAssembly.MSBuild.Tasks.Build" AssemblyName="SmartAssembly.MSBuild.Tasks, Version=6.0.0.0,
Culture=neutral, PublicKeyToken=7f465a1c156d4d57" />
<Target Name="PostBuildEvent" Condition=" '$(Configuration)' == 'Release' ">
<SmartAssembly.MSBuild.Tasks.Build ProjectFile="MyApp.saproj" />
</Target>
This appears to build and publish fine, however upon inspecting the command line output I have noticed that the publish occurs before the obfuscation.
Obviously obfuscation needs to happen after the build, but before the publish, is this possible?
I have tried a few things, including editing the *.pub.xml file to call obfuscate via a 'BuildDependsOn' node, but this causes the obfuscation to run before the build.
<BuildDependsOn>
Obfuscate;
$(BuildDependsOn);
</BuildDependsOn>
It just does not seem possible to decouple the build from the publish, the only option I have at the moment is to build it twice, where the second publish picks up the obfuscated files from the first build.