我正在使用 MSbuild 构建和部署 .NET 4.6.2 项目。我有Main.proj
以下配置的文件
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>
<PublishProfileName>$(Configuration).pubxml</PublishProfileName>
<IntegrationDomainOutput>$(MSBuildThisFileDirectory)BuildOutput\</IntegrationDomainOutput>
<VisualStudioVersion>14.0</VisualStudioVersion>
<Framework40Dir>C:\Windows\Microsoft.NET\Framework64\v4.0.30319</Framework40Dir>
</PropertyGroup>
<Target Name="Main" DependsOnTargets="Clean">
<!--<Error Condition="$(SchedulerServiceDestinationFolder)==''" Text="'SchedulerServiceDestinationFolder' property is missing." />-->
<CallTarget Targets="BuildAndDeployApi;" />
</Target>
<Target Name="Clean">
<RemoveDir Directories="$(IntegrationDomainOutput)"/>
</Target>
<Target Name="BuildAndDeployApi">
<MSBuild Projects="$(MSBuildThisFileDirectory)IntegrationDomain.sln"
Properties="Configuration=$(Configuration);
DeployOnBuild=true;
PublishProfile=$(PublishProfileName);
OutDir=$(IntegrationDomainOutput);
VisualStudioVersion=$(VisualStudioVersion);
Framework40Dir=$(Framework40Dir)"
Targets="Build"/>
</Target>
</Project>
我也有.pubxml
每个环境的相应文件。
msbuild Main.proj /p:Configuration=development
在 Jenkins 中,我只需运行构建和部署项目的 windows 命令。
现在我想在构建之后但在部署之前执行单元测试。Main.proj
构建时,单元测试项目文件被Domain.UnitTests.dll
复制到$(ItegrationDomainOutput)
路径。
mstest
执行单元测试的相应命令是
mstest /testcontainer:$(ItegrationDomainOutput)\Domain.UnitTests.dll /resultsfile:TestResults.trx
但是我不确定如何在构建之后但在部署之前执行此命令
更新 1
有我们可以覆盖的预定义目标AfterBuild
。AfterCompile
因此,根据文档,我已经更新了我的 proj 文件。我覆盖了AfterCompile
目标,然后更新了Build
目标的DependsOnTargets
属性。
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
... This part is same as original
... Removed for Brevity purpose
<Target Name="Build" DependsOnTargets="AfterCompile"/>
<Target Name="BuildAndDeployApi">
<MSBuild Projects="$(MSBuildThisFileDirectory)IntegrationDomain.sln"
Properties="Configuration=$(Configuration);
DeployOnBuild=true;
PublishProfile=$(PublishProfileName);
OutDir=$(IntegrationDomainOutput);
VisualStudioVersion=$(VisualStudioVersion);
Framework40Dir=$(Framework40Dir)"
Targets="Build"/>
</Target>
<Target Name="AfterCompile">
<!--Run MSTest.exe-->
<Exec Command="C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\mstest.exe /testcontainer:$(IntegrationDomainOutput)\Domain.UnitTests.dll" >
</Exec>
</Target>
</Project>
但是,AfterCompile
目标永远不会被执行