我有一个正在CI服务器上构建的web应用程序(WebAPI web服务)。它使用VS2013、发布到文件系统的发布配置文件(*.pubxml)以及CI服务器任务中的以下命令构建和发布fine。
MSBuild %ProjectPath%/MyApp.sln /t:Clean,Build /p:Configuration=Release;DeployOnBuild=True;PublishProfile=TAGBIN;VisualStudioVersion=12.0
然而,我也需要对软件进行模糊处理,模糊处理程序(Red Gate Smart Assembly)是通过放置在csproj文件中的以下xml调用的。
<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>
这看起来构建和发布很好,但在检查命令行输出时,我注意到发布发生在混淆之前。
显然,混淆需要在构建之后发生,但在发布之前发生,这可能吗?
我尝试了一些方法,包括编辑*.pub.xml文件以通过"BuildDependsOn"节点调用模糊处理,但这会导致模糊处理在生成之前运行。
<BuildDependsOn>
Obfuscate;
$(BuildDependsOn);
</BuildDependsOn>
似乎不可能将构建与发布解耦,目前我唯一的选择是构建两次,第二次发布从第一次构建中提取模糊的文件。
在MSBuild 4.0及更高版本中,可以使用BeforeTargets
和AfterTargets
来控制目标生成顺序。
下面的示例介绍了在构建之后但在发布之前执行的新构建步骤:
<Target Name="MyNewBuildStep" AfterTargets="CoreBuild" BeforeTargets="Publish">
<Message Text="Executing new build step" />
</Target>