0

我正在使用 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
有我们可以覆盖的预定义目标AfterBuildAfterCompile因此,根据文档,我已经更新了我的 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目标永远不会被执行

4

0 回答 0