如何在MSBuild中访问SDK名称

问题描述 投票:0回答:1

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

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

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

用例: 我有一个相当大的解决方案,包含 WPF 项目以及库项目,我喜欢在

Directory.Build.props
文件中配置 TargetFramework。 但是,我必须区分 WPF 项目和非 WPF 项目才能设置正确的 TargetFramework。 我想检查
Microsoft.NET.Sdk.WindowsDesktop
是否被选中。 目前我依赖于一个特定的项目nomenklatur(名称包含.Wpf),这是相当hacky的。

            <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>
c# .net wpf msbuild
1个回答
0
投票

SDK元素
上的
Project
属性创建隐式导入。这也可以使用
Sdk
元素
来完成。一个项目可以声明多个 SDK,并且给定的 SDK 可以引入多个其他 SDK。

项目 SDK 似乎无法作为属性或项目集合提供。

但是,SDK 可以定义 SDK 独有的属性或项目集合。测试属性或项目集合不为空表明 SDK 已导入。

WPF 的

Microsoft.NET.Sdk.WindowsDesktop
SDK 似乎定义了一个值为
_MicrosoftWindowsDesktopSdkImported
true
属性。您可以测试该属性而不是测试文件名。

寻找要测试的东西的两种方法:

  • 检查.NET项目SDK的源代码。 “可用 SDK”列出了一些 Microsoft 项目 SDK 及其存储库。
  • 在项目文件上运行
    -preprocess
    并检查输出以查看导入和定义的内容。
© www.soinside.com 2019 - 2024. All rights reserved.