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

如何在MSBuild中获取SDK名称,区分项目配置TargetFramework

获取C#项目SDK名称并区分WPF项目配置TargetFramework

问题描述

我有一个C# SDK项目文件:

<Project Sdk="Microsoft.NET.Sdk">
  ...
</Project>

如何将SDK名称作为变量获取?

使用场景:
我维护一个包含WPF项目和类库项目的大型解决方案,希望在Directory.Build.props中统一配置TargetFramework。但需要区分WPF项目与非WPF项目来设置正确的TargetFramework——我想检查项目是否使用了Microsoft.NET.Sdk.WindowsDesktop SDK。目前我依赖项目命名规则(名称包含.Wpf)来判断,这种方式很不规范。

当前代码如下:

<Choose>
    <!--   - HACK to apply net7.0-windows to all Wpf-Projects-->
    <When Condition="'$(MSBuildProjectName.Contains(`.Wpf`))' == 'true'">
        <PropertyGroup>
            <TargetFrameworks>net7.0-windows</TargetFrameworks>
        </PropertyGroup>
    </When>
    <Otherwise>
        <PropertyGroup>
            <TargetFrameworks>net7.0</TargetFrameworks>
        </PropertyGroup>
    </Otherwise>
</Choose>

解决方案

获取SDK名称变量

MSBuild内置了$(MSBuildProjectSdkName)属性,可直接获取项目文件中指定的SDK名称。例如,对于使用<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">的项目,该属性的值就是Microsoft.NET.Sdk.WindowsDesktop。

规范配置TargetFramework

利用这个内置属性替代命名规则判断,修改Directory.Build.props中的配置如下:

<Choose>
    <When Condition="'$(MSBuildProjectSdkName)' == 'Microsoft.NET.Sdk.WindowsDesktop'">
        <PropertyGroup>
            <TargetFrameworks>net7.0-windows</TargetFrameworks>
        </PropertyGroup>
    </When>
    <Otherwise>
        <PropertyGroup>
            <TargetFrameworks>net7.0</TargetFrameworks>
        </PropertyGroup>
    </Otherwise>
</Choose>

这样就能精准识别WPF项目,无需依赖命名规则,配置更规范可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 02:38:38