我有关于 此 NuGet 页面 的问题。是的,现在 .NET 6 显示在顶部。但是,正如您在 Frameworks 选项卡 中看到的那样,.NET 6 和 .NET 7 都受支持。我应该如何更改我的 csproj (或执行其他操作)以确保两个版本都显示在顶部?
这是我的csproj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net7.0;net6.0</TargetFrameworks>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<Title>Xunit.TestLogger</Title>
<Company>Connecting Apps</Company>
<Description>See the output of your logging in your xUnit integration tests</Description>
<Copyright>© 2023 Connecting Apps. All rights BLAH BLAH </Copyright>
<PackageProjectUrl>https://github.com/ConnectingApps/Xunit.TestLogger</PackageProjectUrl>
<RepositoryUrl>https://github.com/ConnectingApps/Xunit.TestLogger</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<PackageReleaseNotes>Initial version</PackageReleaseNotes>
<PackageReadmeFile>README.md</PackageReadmeFile>
<PackageIcon>Icon.png</PackageIcon>
<Version>1.0.1-preview</Version>
</PropertyGroup>
<!-- Package Icon -->
<ItemGroup>
<None Include="Icon.png" Pack="True" PackagePath="" />
</ItemGroup>
<!-- ScreenForLogging (screenshot for README) -->
<ItemGroup>
<None Include="..\ScreenForLogging.png" Pack="True" PackagePath="" />
</ItemGroup>
<!-- Readme File -->
<ItemGroup>
<None Include="..\README.md">
<Pack>True</Pack>
<PackagePath>\</PackagePath>
</None>
</ItemGroup>
<!-- NuGet packages for net6.0 -->
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0'">
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="[6.0.0, 6.0.99]" />
<PackageReference Include="xunit.abstractions" Version="[2.0.3, 3.2.0]" />
</ItemGroup>
<!-- NuGet packages for net7.0 -->
<ItemGroup Condition="'$(TargetFramework)' == 'net7.0'">
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="[7.0.0, 7.0.99]" />
<PackageReference Include="xunit.abstractions" Version="[2.0.3, 3.2.0]" />
</ItemGroup>
</Project>
NuGet 是开源的,包括 nuget.org 网站,所以让我们研究一下。
右键单击 nuget.org 上的包的 .NET 6.0 徽章,然后选择“检查”会显示该页面的 HTML,并直接进入徽章的 HTML。查看父节点,它显示
<div class="framework framework-badges">
。 framework-badges
听起来很独特,可以在源中搜索。
现在,转到 https://github.com/NuGet,在固定的存储库中,NuGetGallery 的描述显示“powers https://www.nuget.org”,所以我转到 https://github。 com/NuGet/NuGetGallery,然后在搜索中输入
framework-badges
,将我带到 此搜索结果页面。它只找到两个命中,一个在样式表中,另一个在剃刀页面中:https://github.com/NuGet/NuGetGallery/blob/ccb8999176522acb1d06baa3c3cd5757af519b45/src/NuGetGallery/Views/Packages/_SupportedFrameworksBadges.cshtml#L5
查看此页面,我看到 4 个
@if
语句,但没有循环。 4 个 if 语句针对一些通用的“net”,后面是 netcore、netstandard 和 netframework。因此,看起来每个框架标识符只能显示一个徽章。
在页面顶部,它显示
@model PackageFrameworkCompatibilityBadges
,因此我打开定义该类的文件:https://github.com/NuGet/NuGetGallery/blob/main/src/NuGetGallery.Core/Frameworks/PackageFrameworkCompatibilityBadges .cs
它为这 4 个属性中的每一个定义了一个
NuGetFramework
实例,并且搜索 该类被实例化和填充,我们可以看到 .Select(d => d.Framework).FirstOrDefault()
。
因此,nuget.org 将仅针对每个“框架”(.NET Standard、.NET (Core) 和 .NET Framework)显示一个徽章。由于 net6.0 和 net7.0 都是
.NETCoreApp
,因此 nuget.org 将仅在页面顶部显示其中之一。但是,如果您单击“框架”选项卡,您会看到它显示您的包兼容的所有框架。