使用 MSBuild 在构建过程中导入目标

Import targets during build process with MSBuild

我正在使用 vcpkg 作为 Visual Studio C++ 项目的包管理器。我已经创建了基本设置 vcpkg 的初始目标(克隆 vcpkg 存储库并下载 vcpkg.exe):

<Target Name="EnsureVcpkgBuild" BeforeTargets="PrepareForBuild">
    <Exec Command="git clone $(VcpkgRepo).git ..\packages\vcpkg" Condition="!Exists('..\packages\vcpkg\.git')" ContinueOnError="true" />
    <Exec Command="git --git-dir=..\packages\vcpkg\.git --work-tree=..\packages\vcpkg pull --ff-only" Condition="Exists('..\packages\vcpkg\.git')" ContinueOnError="true" />
    <Exec Command="..\packages\vcpkg\bootstrap-vcpkg.bat" Condition="!Exists('..\packages\vcpkg\vcpkg.exe')" ContinueOnError="true" />
    <PropertyGroup>
      <ErrorText>This project uses vcpkg that is missing on this computer. Manually download from $(VcpkgRepo) and place the contents in {0}. Or install git and add it to your path, for more information see https://git-scm.com. The missing file is {1}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('..\packages\vcpkg\vcpkg.exe')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\vcpkg\', '..\packages\vcpkg\vcpkg.exe'))" />
    <Error Condition="!Exists('..\packages\vcpkg\scripts\buildsystems\msbuild\vcpkg.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\vcpkg\', '..\packages\vcpkg\scripts\buildsystems\msbuild\vcpkg.targets'))" />
</Target>

在我的项目中,我正在导入 vcpkg 目标文件:

<ImportGroup>
    <Import Project="..\packages\vcpkg\scripts\buildsystems\msbuild\vcpkg.targets" Condition="Exists('..\packages\vcpkg\scripts\buildsystems\msbuild\vcpkg.targets')" />
</ImportGroup>

此设置可确保构建在 Visual Studio 中顺利进行,无需任何额外工作。但是,在使用 CI/CD 管道时,我必须先调用 EnsureVcpkgBuild,然后再尝试构建项目。我能否以不必调用 EnsureVcpkgBuild 并启动构建自动设置 vcpkg 和导入 vcpkg.targets 的方式设置此项目?

可以直接使用nuget包自动实现。

我认为你写了一个目标来下载reop项目vcpkg到本地,然后从下载的vcpkg项目中手动导入核心目标。

在本地可以轻松完成,但在 cl 管道上,它不适合。

所以使用 nuget 会更容易。

只需将 nuget 包 Vcpkg.Nuget 安装到您的 C++ 项目中。

所有导入目标都在 nuget 包中,安装 nuget 后可以自动导入到您的项目中。

当您在 CI/CD 管道上时,只需添加一个 nuget restore task 即可恢复管道上的 nuget 包。