提问人:howardButcher 提问时间:11/7/2023 最后编辑:howardButcher 更新时间:11/9/2023 访问量:46
如何在 MSBuild 中访问 SDK 名称
How to access the SDK name in MSBuild
问:
我有一个 C# SDK 项目文件:
<Project Sdk="Microsoft.NET.Sdk">
...
</Project>
如何获取 SDK 名称作为变量?
使用案例:
我有一个相当大的解决方案,包含 WPF 项目和库项目,我喜欢在文件中配置 TargetFramework。
但是,我必须区分 WPF 项目和非 WPF 项目才能设置正确的 TargetFramework。
我喜欢检查是否被选中。
目前我依赖于一个特定的项目 nomenklatur(名称包含 .Wpf),这是相当骇人听闻的。Directory.Build.props
Microsoft.NET.Sdk.WindowsDesktop
<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>
答:
1赞
Jonathan Dodds
11/9/2023
#1
Project
元素上的属性创建隐式导入。这也可以通过 Sdk
元素来完成。一个项目可以声明多个 SDK,一个给定的 SDK 可以拉取多个其他 SDK。SDK
项目 SDK 似乎不能作为属性或项集合使用。
但是,SDK 可以定义 SDK 独有的属性或项集合。测试属性或项集合是否为空表明 SDK 已导入。
适用于 WPF 的开发工具包似乎定义了一个值为 的属性。您可以测试该属性,而不是测试文件名。Microsoft.NET.Sdk.WindowsDesktop
_MicrosoftWindowsDesktopSdkImported
true
查找要测试的内容的两种方法:
- 检查 .NET 项目 SDK 的源代码。“可用的 SDK”列出了一些 Microsoft 项目 SDK 及其存储库。
- 在项目文件上运行
-preprocess
,并检查输出以查看导入和定义的内容。
评论
0赞
howardButcher
11/10/2023
挽救了我的一周。谢谢!
评论
Microsoft.NET.Sdk.WindowsDesktop
_MicrosoftWindowsDesktopSdkImported
true