MSBuild项目以测试C++;程序 我有一个.VCXPROJ文件,编译C++程序。我想创建第二个MSBuild项目文件,通过运行该文件来测试该程序,但前提是该程序自上次成功测试以来已重建。如何从第二个项目文件访问程序的“TargetPath”

MSBuild项目以测试C++;程序 我有一个.VCXPROJ文件,编译C++程序。我想创建第二个MSBuild项目文件,通过运行该文件来测试该程序,但前提是该程序自上次成功测试以来已重建。如何从第二个项目文件访问程序的“TargetPath”,msbuild,Msbuild,如果我可以从.vcxproj文件中作为“项”访问TargetPath,那么测试仪项目文件将如下所示: <?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Target Name="Build" Inputs="@(

如果我可以从.vcxproj文件中作为“项”访问TargetPath,那么测试仪项目文件将如下所示:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="Build" Inputs="@(TargetPath)" Outputs="@(TargetPath->'%(filename).test-passed)'">
    <Exec Command="@(TargetPath)" />
    <Touch Files="@(TargetPath->'%(filename).test-passed)'" />
  </Target>
</Project>


我希望在编译程序时使用一个单独的项目文件执行测试,以便在Visual Studio中更容易地在生成和测试或生成和调试之间进行选择,而无需成倍增加生成配置。

可以使用MSBuild任务运行由单独的.vcxproj编译的本机程序。使用<代码> 元素创建一个带有C++应用程序构建的“Talk输出”项。但是,如果您正在构建“本机”程序,“targetOutput”通常为空。在这种情况下,使用“GetNativeTargetPath”目标获取输出路径。下面的project.vcxproj文件适用于VisualStudio。它构建test_build.vcxproj。如果test_build.exe文件自上次成功运行以来已更改,则将运行该文件

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <ItemGroup>
    <ProjectConfiguration Include="Debug|x64">
      <Configuration>Debug</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|x64">
      <Configuration>Release</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
  </ItemGroup>
  <PropertyGroup Label="Globals">
    <ProjectGuid>{80DB0D71-72E0-4FB1-B53F-EFB858A1D5A8}</ProjectGuid>
    <Keyword>Win32Proj</Keyword>
    <RootNamespace>nordic_test_run</RootNamespace>
  </PropertyGroup>
  <PropertyGroup>
    <ConfigurationType>Application</ConfigurationType>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />

  <ItemGroup>
    <ProjectReference Include="test_build.vcxproj" />
  </ItemGroup>

  <Target Name="BuildExecutable">
    <MSBuild Projects="@(ProjectReference)" Targets="Build" BuildInParallel="True" />
    <MSBuild Projects="@(ProjectReference)" Targets="GetNativeTargetPath" BuildInParallel="True">
      <Output TaskParameter="TargetOutputs" ItemName="NativeTests" />
    </MSBuild>
  </Target>

  <Target Name="Build" DependsOnTargets="BuildExecutable" Inputs="@(NativeTests)" Outputs="@(NativeTests-&gt;'%(filename).test-passed')">
    <Exec Command="@(NativeTests)" />
    <Touch Files="@(TestTargets-&gt;'%(filename).test-passed')" />
  </Target>
</Project>

调试
x64
释放
x64
{80DB0D71-72E0-4FB1-B53F-EFB858A1D5A8}
Win32Proj
北欧测试运行
应用

只需使用
Import
导入vcxproj?应该允许您访问其中的每个属性和项目。我建议将您的目标名称更改为Build以外的其他名称,因为它已经存在于vcxprojI中,所以我尝试更改目标名称,并按照您的建议使用
Import
。这不适用于我的VisualStudio用例,因为我们只能构建“众所周知”的目标:build、Clean等。此外,我不知道如何引用导入的构建目标的输出。我认为我的目标是使用MSBuild是可能的,但我还没有弄清楚。