Skip to content

Commit ac1df89

Browse files
authored
add performance and structure enhancements (#10)
2 parents d0c599e + f100f40 commit ac1df89

File tree

105 files changed

+437
-385
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

105 files changed

+437
-385
lines changed

Diff for: .editorconfig

+90-91
Large diffs are not rendered by default.

Diff for: .github/copilot-instructions.md

+1

Diff for: .github/workflows/ci.yml

+6-1
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,13 @@ on:
1212

1313
jobs:
1414
build:
15-
uses: mycsharp/github-actions/.github/workflows/dotnet-nuget-build.yml@main
15+
uses: mycsharp/github-actions/.github/workflows/dotnet-nuget-build-multi-sdk.yml@main
1616
with:
1717
configuration: Release
18+
dotnet-sdks: |
19+
8.x
20+
9.x
21+
10.x
22+
1823
secrets:
1924
NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}

Diff for: Directory.Build.props

+97-33
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,25 @@
11
<Project>
2-
3-
<PropertyGroup>
4-
<Authors>MyCSharp.de, Benjamin Abt, Günther Foidl and Contributors</Authors>
2+
<PropertyGroup Label="Project">
53
<Product>MyCSharp.HttpClientHints</Product>
6-
<DefaultLanguage>en-US</DefaultLanguage>
7-
<NoPackageAnalysis>true</NoPackageAnalysis>
8-
<DebugType>embedded</DebugType>
9-
</PropertyGroup>
10-
11-
<PropertyGroup Label="Env">
12-
13-
<IsTestProject>$(MSBuildProjectName.Contains('Test'))</IsTestProject>
14-
<IsBenchmarkProject>$(MsBuildProjectName.Contains('Benchmark'))</IsBenchmarkProject>
15-
</PropertyGroup>
16-
17-
<PropertyGroup Label="Package">
18-
<PackageProjectUrl>https://github.com/mycsharp/HttpClientHints</PackageProjectUrl>
19-
<PublishRepositoryUrl>true</PublishRepositoryUrl>
20-
<Description>HTTP Client Hints for .NET</Description>
21-
<MinClientVersion>2.12</MinClientVersion>
22-
<IsPackable>false</IsPackable>
23-
<PackageTags>UserAgent, User Agent, Client Hints, Browser, Client, Detector, Detection, Console, ASP, Desktop, Mobile</PackageTags>
24-
<EmbedUntrackedSources>true</EmbedUntrackedSources>
4+
<Authors>MyCSharp.de, Benjamin Abt, Günther Foidl and Contributors</Authors>
5+
<Company>MyCSharp.de</Company>
256
</PropertyGroup>
267

27-
<PropertyGroup Label="Project Defaults">
28-
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
29-
</PropertyGroup>
8+
<PropertyGroup Label="Vars">
9+
<IsWindows Condition="$([MSBuild]::IsOSPlatform('Windows'))">true</IsWindows>
10+
<IsOSX Condition="$([MSBuild]::IsOSPlatform('OSX'))">true</IsOSX>
11+
<IsLinux Condition="$([MSBuild]::IsOSPlatform('Linux'))">true</IsLinux>
3012

31-
<PropertyGroup Label="C#">
32-
<LangVersion>12.0</LangVersion>
33-
<Nullable>enable</Nullable>
34-
<ImplicitUsings>enable</ImplicitUsings>
35-
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
13+
<IsTestProject>$(MSBuildProjectName.EndsWith('Tests'))</IsTestProject>
14+
<IsUnitTestProject>$(MSBuildProjectName.EndsWith('UnitTests'))</IsUnitTestProject>
15+
<IsIntegrationTestProject>$(MSBuildProjectName.EndsWith('IntegrationTests'))</IsIntegrationTestProject>
16+
<IsBenchmarkProject>$(MsBuildProjectName.EndsWith('Benchmarks'))</IsBenchmarkProject>
3617
</PropertyGroup>
3718

38-
<PropertyGroup Condition="'$(IsTestProject)' != 'true' AND '$(IsBenchmarkProject)' != 'true'">
39-
<GenerateDocumentationFile Condition="'$(Configuration)' == 'Release'">true</GenerateDocumentationFile>
19+
<PropertyGroup Label="Assembly">
20+
<TargetFrameworks>net8.0;net9.0;net10.0</TargetFrameworks>
21+
<RootNamespace>MyCSharp.$(MSBuildProjectName)</RootNamespace>
22+
<AssemblyName>MyCSharp.$(MSBuildProjectName)</AssemblyName>
4023
</PropertyGroup>
4124

4225
<PropertyGroup>
@@ -52,10 +35,91 @@
5235
</PublicKey>
5336
</PropertyGroup>
5437

55-
<!-- Block Projects with Privacy/Security Concerns -->
38+
<PropertyGroup Label="Compiler">
39+
<LangVersion>preview</LangVersion>
40+
<DebugType>embedded</DebugType>
41+
<Nullable>enable</Nullable>
42+
<DefaultLanguage>en-US</DefaultLanguage>
43+
<ImplicitUsings>enable</ImplicitUsings>
44+
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
45+
</PropertyGroup>
46+
47+
<PropertyGroup Label="Package">
48+
<IsPackable>false</IsPackable>
49+
<NoPackageAnalysis>true</NoPackageAnalysis>
50+
<MinClientVersion>2.12</MinClientVersion>
51+
<EmbedUntrackedSources>true</EmbedUntrackedSources>
52+
53+
<Description>HTTP Client Hints for .NET</Description>
54+
<PackageProjectUrl>https://github.com/mycsharp/HttpClientHints</PackageProjectUrl>
55+
<RepositoryUrl>https://github.com/mycsharp/HttpClientHints</RepositoryUrl>
56+
<PackageTags>UserAgent, User Agent, Client Hints, Browser, Client, Detector, Detection, Console, ASP, Desktop, Mobile</PackageTags>
57+
</PropertyGroup>
58+
59+
<PropertyGroup Condition="'$(IsTestProject)' != 'true' AND '$(IsBenchmarkProject)' != 'true'">
60+
<GenerateDocumentationFile>true</GenerateDocumentationFile>
61+
</PropertyGroup>
62+
63+
<PropertyGroup Label="Visual Studio">
64+
<!-- https://devblogs.microsoft.com/visualstudio/visual-studio-2022-17-5-performance-enhancements/ -->
65+
<AccelerateBuildsInVisualStudio>true</AccelerateBuildsInVisualStudio>
66+
</PropertyGroup>
67+
68+
<PropertyGroup Label="NuGet Audit">
69+
<NuGetAudit>true</NuGetAudit>
70+
<NuGetAuditMode>all</NuGetAuditMode>
71+
<NuGetAuditLevel>low</NuGetAuditLevel>
72+
</PropertyGroup>
73+
74+
<ItemGroup Label="Default Test Dependencies" Condition="'$(IsTestProject)' == 'true'">
75+
<PackageReference Include="Microsoft.NET.Test.Sdk" />
76+
<PackageReference Include="Microsoft.Extensions.Diagnostics.Testing" />
77+
<PackageReference Include="NSubstitute" />
78+
<PackageReference Include="NSubstitute.Analyzers.CSharp">
79+
<PrivateAssets>all</PrivateAssets>
80+
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
81+
</PackageReference>
82+
<PackageReference Include="xunit.v3" />
83+
<PackageReference Include="xunit.v3.extensibility.core"/>
84+
<PackageReference Include="xunit.v3.assert" />
85+
<PackageReference Include="xunit.runner.console">
86+
<PrivateAssets>all</PrivateAssets>
87+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
88+
</PackageReference>
89+
<PackageReference Include="xunit.runner.visualstudio">
90+
<PrivateAssets>all</PrivateAssets>
91+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
92+
</PackageReference>
93+
</ItemGroup>
94+
95+
<ItemGroup Label="Default Analyzers">
96+
<PackageReference Include="Roslynator.Analyzers">
97+
<PrivateAssets>all</PrivateAssets>
98+
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
99+
</PackageReference>
100+
<PackageReference Include="Roslynator.Formatting.Analyzers">
101+
<PrivateAssets>all</PrivateAssets>
102+
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
103+
</PackageReference>
104+
<PackageReference Include="Roslynator.CodeAnalysis.Analyzers">
105+
<PrivateAssets>all</PrivateAssets>
106+
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
107+
</PackageReference>
108+
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" />
109+
<PackageReference Include="Microsoft.CodeAnalysis.Common" />
110+
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" />
111+
<PackageReference Include="Meziantou.Analyzer">
112+
<PrivateAssets>all</PrivateAssets>
113+
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
114+
</PackageReference>
115+
</ItemGroup>
116+
117+
<!-- Block Projects with Privacy/Security/License Concerns -->
56118
<Target Name="CheckBlockedPackages" AfterTargets="ResolvePackageDependenciesForBuild">
57119
<Error Code="420" Text="Blocked package dependency detected: %(PackageDependencies.Identity)"
58120
Condition="'%(PackageDependencies.Identity)' == 'Devlooped.SponsorLink'" />
121+
<Error Code="420" Text="Blocked package dependency detected: %(PackageDependencies.Identity)"
122+
Condition="'%(PackageDependencies.Identity)' == 'FluentAssertions'" />
59123
</Target>
60124

61125
</Project>

Diff for: Directory.Packages.props

+28-14
Original file line numberDiff line numberDiff line change
@@ -2,40 +2,54 @@
22
<PropertyGroup>
33
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
44
</PropertyGroup>
5-
6-
<ItemGroup Label=".NET Dependencies">
5+
6+
<ItemGroup Label="Dependencies">
77
<PackageVersion Include="Microsoft.Extensions.Primitives" Version="8.0.0" />
88
</ItemGroup>
9-
10-
<ItemGroup Label="Tests / Performance">
9+
10+
<ItemGroup Label="Benchmarks">
1111
<PackageVersion Include="BenchmarkDotNet" Version="0.14.0" />
1212
<PackageVersion Include="BenchmarkDotNet.Diagnostics.Windows" Version="0.14.0" />
13+
</ItemGroup>
14+
15+
<ItemGroup Label="Tests">
16+
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
17+
<PackageVersion Include="Microsoft.Extensions.Diagnostics.Testing" Version="9.4.0" />
1318
<PackageVersion Include="NSubstitute" Version="5.3.0" />
14-
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
15-
<PackageVersion Include="xunit" Version="2.9.2" />
16-
<PackageVersion Include="xunit.runner.console" Version="2.9.2">
19+
<PackageVersion Include="NSubstitute.Analyzers.CSharp" Version="1.0.17">
20+
<PrivateAssets>all</PrivateAssets>
21+
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
22+
</PackageVersion>
23+
<PackageVersion Include="xunit.v3" Version="2.0.1" />
24+
<PackageVersion Include="xunit.v3.extensibility.core" Version="2.0.1" />
25+
<PackageVersion Include="xunit.v3.assert" Version="2.0.1" />
26+
<PackageVersion Include="xunit.runner.console" Version="2.9.3">
1727
<PrivateAssets>all</PrivateAssets>
1828
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
1929
</PackageVersion>
20-
<PackageVersion Include="xunit.runner.visualstudio" Version="2.8.2">
30+
<PackageVersion Include="xunit.runner.visualstudio" Version="3.0.2">
2131
<PrivateAssets>all</PrivateAssets>
2232
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
2333
</PackageVersion>
24-
<PackageVersion Include="coverlet.msbuild" Version="6.0.0">
34+
</ItemGroup>
35+
36+
<ItemGroup Label="Analyzers">
37+
<PackageVersion Include="Roslynator.Analyzers" Version="4.13.1">
2538
<PrivateAssets>all</PrivateAssets>
2639
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
2740
</PackageVersion>
28-
</ItemGroup>
29-
<ItemGroup Label="Roslyn">
30-
<PackageVersion Include="Roslynator.Analyzers" Version="4.12.9">
41+
<PackageVersion Include="Roslynator.Formatting.Analyzers" Version="4.13.1">
3142
<PrivateAssets>all</PrivateAssets>
3243
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
3344
</PackageVersion>
34-
<PackageVersion Include="Roslynator.Formatting.Analyzers" Version="4.12.9">
45+
<PackageVersion Include="Roslynator.CodeAnalysis.Analyzers" Version="4.13.1">
3546
<PrivateAssets>all</PrivateAssets>
3647
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
3748
</PackageVersion>
38-
<PackageVersion Include="Roslynator.CodeAnalysis.Analyzers" Version="4.12.9">
49+
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="4.13.0" />
50+
<PackageVersion Include="Microsoft.CodeAnalysis.Common" Version="4.13.0" />
51+
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.13.0" />
52+
<PackageVersion Include="Meziantou.Analyzer" Version="2.0.195">
3953
<PrivateAssets>all</PrivateAssets>
4054
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
4155
</PackageVersion>

Diff for: MyCSharp.HttpClientHints.sln

+5-5
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,17 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_", "_", "{E23F6AE5-FF68-4E
2222
version.json = version.json
2323
EndProjectSection
2424
EndProject
25-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCSharp.HttpClientHints", "src\MyCSharp.HttpClientHints\MyCSharp.HttpClientHints.csproj", "{3FC14B16-D6F7-4A28-8562-0BD7EDD6A3DC}"
25+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HttpClientHints", "src\HttpClientHints\HttpClientHints.csproj", "{3FC14B16-D6F7-4A28-8562-0BD7EDD6A3DC}"
2626
EndProject
27-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCSharp.HttpClientHints.AspNetCore", "src\MyCSharp.HttpClientHints.AspNetCore\MyCSharp.HttpClientHints.AspNetCore.csproj", "{8A434079-78A3-41C5-8319-3165B0D10E51}"
27+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HttpClientHints.AspNetCore", "src\HttpClientHints.AspNetCore\HttpClientHints.AspNetCore.csproj", "{8A434079-78A3-41C5-8319-3165B0D10E51}"
2828
EndProject
29-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCSharp.HttpClientHints.AspNetCore.UnitTests", "tests\MyCSharp.HttpClientHints.AspNetCore.UnitTests\MyCSharp.HttpClientHints.AspNetCore.UnitTests.csproj", "{2BDA44E4-1E40-4B97-8903-B8C36C35B8C4}"
29+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HttpClientHints.AspNetCore.UnitTests", "tests\HttpClientHints.AspNetCore.UnitTests\HttpClientHints.AspNetCore.UnitTests.csproj", "{2BDA44E4-1E40-4B97-8903-B8C36C35B8C4}"
3030
EndProject
31-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCSharp.HttpClientHints.UnitTests", "tests\MyCSharp.HttpClientHints.UnitTests\MyCSharp.HttpClientHints.UnitTests.csproj", "{E60AE9AF-09E5-4FE0-A005-5F697599E508}"
31+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HttpClientHints.UnitTests", "tests\HttpClientHints.UnitTests\HttpClientHints.UnitTests.csproj", "{E60AE9AF-09E5-4FE0-A005-5F697599E508}"
3232
EndProject
3333
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{DD28B2F1-1CF8-4070-A997-83DE356EA88C}"
3434
EndProject
35-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyCSharp.HttpClientHints.Samples.AspNetCoreMvc", "samples\MyCSharp.HttpClientHints.Samples.AspNetCoreMvc\MyCSharp.HttpClientHints.Samples.AspNetCoreMvc.csproj", "{2F2815DE-1730-4645-B6CF-13599BBA3B2C}"
35+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HttpClientHints.Samples.AspNetCoreMvc", "samples\HttpClientHints.Samples.AspNetCoreMvc\HttpClientHints.Samples.AspNetCoreMvc.csproj", "{2F2815DE-1730-4645-B6CF-13599BBA3B2C}"
3636
EndProject
3737
Global
3838
GlobalSection(SolutionConfigurationPlatforms) = preSolution

Diff for: global.json

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"sdk": {
3-
"version": "9.0.100"
4-
}
2+
"sdk": {
3+
"version": "10.0.100-preview.2.25164.34"
4+
}
55
}

Diff for: samples/MyCSharp.HttpClientHints.Samples.AspNetCoreMvc/MyCSharp.HttpClientHints.Samples.AspNetCoreMvc.csproj renamed to samples/HttpClientHints.Samples.AspNetCoreMvc/HttpClientHints.Samples.AspNetCoreMvc.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
</PropertyGroup>
66

77
<ItemGroup>
8-
<ProjectReference Include="..\..\src\MyCSharp.HttpClientHints.AspNetCore\MyCSharp.HttpClientHints.AspNetCore.csproj" />
8+
<ProjectReference Include="..\..\src\HttpClientHints.AspNetCore\HttpClientHints.AspNetCore.csproj" />
99
</ItemGroup>
1010

1111
</Project>

Diff for: samples/MyCSharp.HttpClientHints.Samples.AspNetCoreMvc/Program.cs renamed to samples/HttpClientHints.Samples.AspNetCoreMvc/Program.cs

+2-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
using MyCSharp.HttpClientHints.AspNetCore;
44

5-
var builder = WebApplication.CreateBuilder(args);
5+
WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
66

77
// Add services to the container.
88
builder.Services.AddControllersWithViews();
@@ -19,7 +19,7 @@
1919
options.Lifetime = TimeSpan.FromDays(31);
2020
});
2121

22-
var app = builder.Build();
22+
WebApplication app = builder.Build();
2323

2424
// Configure the HTTP request pipeline.
2525
if (!app.Environment.IsDevelopment())
@@ -44,5 +44,4 @@
4444
name: "default",
4545
pattern: "{controller=Home}/{action=Index}/{id?}");
4646

47-
4847
app.Run();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<Product>HTTP Client Hints Extensions for ASP.NET Core</Product>
5+
<Description>HTTP Client Hints Extensions for ASP.NET Core</Description>
6+
</PropertyGroup>
7+
8+
<PropertyGroup Label="Package">
9+
<IsPackable>true</IsPackable>
10+
<PackageReadmeFile>readme.md</PackageReadmeFile>
11+
<PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
12+
</PropertyGroup>
13+
14+
<ItemGroup>
15+
<None Include="readme.md" Pack="true" PackagePath="" />
16+
<None Include="LICENSE.txt" Pack="true" PackagePath="" />
17+
</ItemGroup>
18+
19+
<ItemGroup>
20+
<FrameworkReference Include="Microsoft.AspNetCore.App" />
21+
</ItemGroup>
22+
23+
<ItemGroup>
24+
<ProjectReference Include="..\HttpClientHints\HttpClientHints.csproj" />
25+
</ItemGroup>
26+
27+
</Project>

0 commit comments

Comments
 (0)