重用 Directory.Build.props 但添加“-windows”

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

因此,对于我的 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>

这行得通还是有问题?

c# .net msbuild csproj
1个回答
0
投票

这很有效——大部分情况下。

我已经使用这种方法有一段时间了,但我发现直接在 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>

© www.soinside.com 2019 - 2024. All rights reserved.