我有一个 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>
SDK
元素上的
Project
属性创建隐式导入。这也可以使用 Sdk
元素 来完成。一个项目可以声明多个 SDK,并且给定的 SDK 可以引入多个其他 SDK。
项目 SDK 似乎无法作为属性或项目集合提供。
但是,SDK 可以定义 SDK 独有的属性或项目集合。测试属性或项目集合不为空表明 SDK 已导入。
WPF 的
Microsoft.NET.Sdk.WindowsDesktop
SDK 似乎定义了一个值为 _MicrosoftWindowsDesktopSdkImported
的 true
属性。您可以测试该属性而不是测试文件名。
寻找要测试的东西的两种方法:
-preprocess
并检查输出以查看导入和定义的内容。