因此,对于我的 C# 项目,我非常喜欢使用 Directory.Build.props,例如用于设置整个解决方案的 dotnet 版本。
但是,这有一个问题。 当我在 Directory.Build.props 中将版本设置为例如
<TargetFramework>net8.0</TargetFramework>
这不会针对 Windows 的 dotnet 8,这是使用 WPF 等框架时所必需的,而 WPF 需要类似这样的东西 <TargetFramework>net8.0-windows</TargetFramework>
。
现在这一切确实有意义,但如果可以在我的 WPF 项目的 props 级别上“重用”设置的框架,我会很高兴,这可能吗?
所以它可能看起来像这样
目录.Build.Props
<Project>
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
...
</PropertyGroup>
...
</Project>
wpfProject.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>$(TargetFramework)-windows</TargetFramework>
...
</PropertyGroup>
</Project>
这行得通还是有问题?
这很有效——大部分情况下。
我已经使用这种方法有一段时间了,但我发现直接在 Directory.Build.props 中指定
<TargetFramework>
有时会导致意外行为(例如,关于没有为特定项目设置目标框架的编译器错误。)似乎最好始终在 csproj 文件中显式包含 <TargetFramework>
(或多目标时为 <TargetFrameworks>
)。
因此,我目前的做法如下。在
Directory.Build.props
:
<Project>
<PropertyGroup>
<TargetFrameworkBaseVersion>net8.0</TargetFrameworkBaseVersion>
...
</PropertyGroup>
...
</Project>
在 .csproj 文件中:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>$(TargetFrameworkBaseVersion)-windows</TargetFramework><!-- With "-windows" when needed, without it otherwise -->
...
</PropertyGroup>
</Project>