You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Microsoft.Build.NoTargets时获取UCRT路径的问题

问题:NoTargets项目中如何使用$(UniversalCRT_PropsPath)替代硬编码的uCRT.props路径?

我创建了一个使用Microsoft.Build.NoTargets的MSBuild项目,需要导入路径为C:\Program Files (x86)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\uCRT.props的文件。我希望使用内置变量$(UniversalCRT_PropsPath)替代完整路径,但该变量在使用Microsoft.Build.NoTargets时未定义,请问是否需要先导入其他内容?

项目代码如下:

<Project>
  <Import Project="Sdk.props" Sdk="Microsoft.Build.NoTargets" Version="3.7.0" />

  <PropertyGroup>
    <TargetFramework>net472</TargetFramework>
    <TargetPlatformVersion>10.0.22621.0</TargetPlatformVersion>
    <WindowsTargetPlatformVersion>10</WindowsTargetPlatformVersion>
    <PlatformToolset Condition="'$(VisualStudioVersion)'=='17.0'">v143</PlatformToolset>
    <Platforms>x64;x86</Platforms>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x86'">
    <Platform>x86</Platform>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <Platform>x64</Platform>
  </PropertyGroup>
  
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x86'">
    <Platform>x86</Platform>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <Platform>x64</Platform>
  </PropertyGroup>

  <Import Project="C:\Program Files (x86)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\uCRT.props"/>

  <Target></Target>
</Project>

解决方案

是的,你需要先导入Windows C++工具链的基础配置文件,因为Microsoft.Build.NoTargets是极简SDK,默认不包含Windows SDK相关的变量初始化逻辑。具体操作如下:

  • 首先导入Microsoft.Cpp.Default.props,这个文件会根据你设置的TargetPlatformVersion、PlatformToolset等变量自动定位Windows SDK路径,并初始化UniversalCRT_PropsPath等相关变量。
  • 注意导入顺序:必须在Sdk.props之后导入Microsoft.Cpp.Default.props,这样才能保证变量被正确初始化。

修改后的项目代码如下:

<Project>
  <Import Project="Sdk.props" Sdk="Microsoft.Build.NoTargets" Version="3.7.0" />

  <!-- 导入C++默认配置,初始化Windows SDK相关变量 -->
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

  <PropertyGroup>
    <TargetFramework>net472</TargetFramework>
    <TargetPlatformVersion>10.0.22621.0</TargetPlatformVersion>
    <WindowsTargetPlatformVersion>10</WindowsTargetPlatformVersion>
    <PlatformToolset Condition="'$(VisualStudioVersion)'=='17.0'">v143</PlatformToolset>
    <Platforms>x64;x86</Platforms>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x86'">
    <Platform>x86</Platform>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <Platform>x64</Platform>
  </PropertyGroup>
  
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x86'">
    <Platform>x86</Platform>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <Platform>x64</Platform>
  </PropertyGroup>

  <!-- 使用初始化后的变量导入uCRT.props -->
  <Import Project="$(UniversalCRT_PropsPath)" />

  <Target></Target>
</Project>

补充说明:$(VCTargetsPath)是Visual Studio自动设置的内置变量,指向当前VS版本的C++ MSBuild工具链路径,无需手动硬编码,能保证在不同环境下的兼容性。


内容的提问来源于stack exchange,提问作者Michael T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 19:17:30