Я использую 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
файл для каждой среды.
В Jenkins тогда я просто запускаю windows command msbuild Main.proj /p:Configuration=development
который строит и развертывает проект.
Теперь я хочу выполнить модульные тесты после сборки, но до развертывания. При сборке Main.proj
файл проекта модульного теста Domain.UnitTests.dll
копируется в $(ItegrationDomainOutput)
путь.
Соответствующая команда mstest
для выполнения модульных тестов:
mstest /testcontainer:$(ItegrationDomainOutput)\Domain.UnitTests.dll /resultsfile:TestResults.trx
Однако я не уверен, как выполнить эту команду после сборки, но до развертывания
ОБНОВЛЕНИЕ 1
Там это AfterBuild
и AfterCompile
предопределенные цели, которые мы можем переопределить. В соответствии с документами я обновил мой файл proj. У меня есть переопределение AfterCompile
target, а затем обновленный Build
атрибут DependsOnTargets
target.
<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
target никогда не будет выполнен