feat: Updates to .NET 9 (#1984)

### Summary

* Bumps to .NET 9 with updated dependencies
* Comparing a value type against null is no longer allowed
* CI/CD now uses the version specified in global.json
* Serialization generator updated to .NET 9 with bug fixes, fixes to turkish language, and parallelization
This commit is contained in:
Kamron Batman 2024-12-08 10:16:34 -08:00 committed by GitHub
parent 51d15d264c
commit c75514cc04
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
24 changed files with 56 additions and 58 deletions

View file

@ -3,7 +3,7 @@
"isRoot": true,
"tools": {
"modernuoschemagenerator": {
"version": "2.11.3",
"version": "2.12.10",
"commands": [
"ModernUOSchemaGenerator"
]

View file

@ -23,10 +23,10 @@ jobs:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # avoid shallow clone so nbgv can do its work.
- name: Setup .NET 8
- name: Install .NET 9
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x
global-json-file: global.json
- name: Install Prerequisites
run: |
brew update
@ -86,10 +86,10 @@ jobs:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # avoid shallow clone so nbgv can do its work.
- name: Setup .NET 8
- name: Install .NET 9
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x
global-json-file: global.json
- name: Build
run: ./publish.cmd Release
- name: Test

View file

@ -14,10 +14,10 @@ jobs:
with:
fetch-depth: 0 # avoid shallow clone so nbgv can do its work.
token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
- name: Setup .NET 8
- name: Install .NET 9
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x
global-json-file: global.json
- name: Install NGBV
uses: dotnet/nbgv@master
id: nbgv

View file

@ -4,7 +4,7 @@
<Authors>Kamron Batman</Authors>
<Company>ModernUO</Company>
<Copyright>2019-2023</Copyright>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net9.0</TargetFramework>
<LangVersion>12</LangVersion>
<PublicRelease>true</PublicRelease>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
@ -62,11 +62,11 @@
<AnalysisLevel>latest</AnalysisLevel>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Serilog" Version="4.0.2" />
<PackageReference Include="Serilog.Sinks.Async" Version="2.0.0" />
<PackageReference Include="Serilog" Version="4.2.0" />
<PackageReference Include="Serilog.Sinks.Async" Version="2.1.0" />
<PackageReference Include="Serilog.Sinks.Console" Version="6.0.0" />
<PackageReference Include="Nerdbank.GitVersioning" Condition="!Exists('packages.config')">
<Version>3.6.143</Version>
<Version>3.6.146</Version>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<AdditionalFiles Include="..\..\Rules.ruleset" />

View file

@ -5,7 +5,7 @@
<RootNamespace>Server.Tests</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
<PackageReference Include="xunit" Version="2.9.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2">
<PrivateAssets>all</PrivateAssets>

View file

@ -66,7 +66,7 @@ public class ArtData : IDisposable
Span<ushort> buffer = stackalloc ushort[entry.Size / 2];
_dataStream.Seek(entry.Offset, SeekOrigin.Begin);
_dataStream.Read(MemoryMarshal.AsBytes(buffer));
_ = _dataStream.Read(MemoryMarshal.AsBytes(buffer));
var width = buffer[2];
var height = buffer[3];

View file

@ -95,7 +95,7 @@ public static class UOClient
{
using FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
var buffer = GC.AllocateUninitializedArray<byte>((int)fs.Length, true);
fs.Read(buffer);
_ = fs.Read(buffer);
// VS_VERSION_INFO (unicode)
Span<byte> vsVersionInfo = stackalloc byte[]
{

View file

@ -3077,7 +3077,7 @@ public class Item : IHued, IComparable<Item>, ISpawnable, IObjectPropertyListEnt
public virtual void SendWorldPacketTo(NetState ns, ReadOnlySpan<byte> world = default)
{
if (world != null)
if (world != ReadOnlySpan<byte>.Empty)
{
ns?.Send(world);
return;

View file

@ -98,7 +98,7 @@ public static class Localization
{
using var fs = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read);
Span<byte> header = stackalloc byte[6];
fs.Read(header);
_ = fs.Read(header);
byte[] data;
BufferReader br;
@ -120,7 +120,7 @@ public static class Localization
else
{
data = GC.AllocateUninitializedArray<byte>((int)fs.Length - 6);
fs.Read(data);
_ = fs.Read(data);
br = new BufferReader(data);
}

View file

@ -449,7 +449,7 @@ public partial class NetState : IComparable<NetState>, IValueLinkListNode<NetSta
public void Send(ReadOnlySpan<byte> span)
{
if (span == null || this.CannotSendPackets())
if (span == ReadOnlySpan<byte>.Empty || this.CannotSendPackets())
{
return;
}

View file

@ -138,7 +138,7 @@ public readonly struct Serial : IComparable<Serial>, IComparable<uint>,
public bool TryFormat(
Span<char> destination, out int charsWritten, ReadOnlySpan<char> format, IFormatProvider provider
) => format != null
) => format != ReadOnlySpan<char>.Empty
? Value.TryFormat(destination, out charsWritten, format, provider)
: destination.TryWrite(provider, $"0x{Value:X8}", out charsWritten);

View file

@ -35,11 +35,11 @@
<ItemGroup>
<PackageReference Include="CommunityToolkit.HighPerformance" Version="8.3.2" />
<PackageReference Include="LibDeflate.Bindings" Version="1.0.2.120" />
<PackageReference Include="PollGroup" Version="1.5.1" />
<PackageReference Include="System.IO.Hashing" Version="8.0.0" />
<PackageReference Include="PollGroup" Version="1.6.1" />
<PackageReference Include="System.IO.Hashing" Version="9.0.0" />
<PackageReference Include="ModernUO.Serialization.Annotations" Version="2.9.1" />
<PackageReference Include="ModernUO.Serialization.Generator" Version="2.11.3" />
<PackageReference Include="ModernUO.Serialization.Generator" Version="2.12.10" />
</ItemGroup>
<ItemGroup>
<AdditionalFiles Include="Migrations/*.v*.json" />

View file

@ -37,7 +37,7 @@ public static class StringHelpers
)
{
size = 0;
if (a == null || a.Length == 0)
if (a == ReadOnlySpan<char>.Empty || a.Length == 0)
{
return;
}
@ -72,7 +72,7 @@ public static class StringHelpers
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static string Remove(this ReadOnlySpan<char> a, ReadOnlySpan<char> b, StringComparison comparison)
{
if (a == null)
if (a == ReadOnlySpan<char>.Empty)
{
return null;
}

View file

@ -338,7 +338,7 @@ public class TileMatrix
fixed (StaticTile* pTiles = staTiles)
{
DataStream.Read(new Span<byte>(pTiles, length));
_ = DataStream.Read(new Span<byte>(pTiles, length));
if (m_Lists == null)
{
@ -423,7 +423,7 @@ public class TileMatrix
fixed (LandTile* pTiles = tiles)
{
MapStream.Read(new Span<byte>(pTiles, 192));
_ = MapStream.Read(new Span<byte>(pTiles, 192));
}
return tiles;

View file

@ -89,7 +89,7 @@ public class TileMatrixPatch
var tiles = new LandTile[64];
fixed (LandTile* pTiles = tiles)
{
fsData.Read(new Span<byte>(pTiles, 192));
_ = fsData.Read(new Span<byte>(pTiles, 192));
}
matrix.SetLandBlock(x, y, tiles);
@ -149,7 +149,7 @@ public class TileMatrixPatch
fixed (StaticTile* pTiles = staTiles)
{
fsData.Read(new Span<byte>(pTiles, length));
_ = fsData.Read(new Span<byte>(pTiles, length));
StaticTile* pCur = pTiles, pEnd = pTiles + tileCount;

View file

@ -52,7 +52,7 @@ public static class HashUtility
public static uint ComputeHash32(ReadOnlySpan<char> str)
{
if (str == null)
if (str == ReadOnlySpan<char>.Empty)
{
return 0;
}

View file

@ -4,7 +4,7 @@
<Configurations>Debug;Release;Analyze</Configurations>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
<PackageReference Include="xunit" Version="2.9.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2">
<PrivateAssets>all</PrivateAssets>

View file

@ -47,7 +47,7 @@ namespace Server.Misc
var name = tokenizer.MoveNext() ? tokenizer.Current : null;
var valueStr = tokenizer.MoveNext() ? tokenizer.Current : null;
if (valueStr == null)
if (valueStr == ReadOnlySpan<char>.Empty)
{
return;
}

View file

@ -39,7 +39,7 @@
</ProjectReference>
<PackageReference Include="LibDeflate.Bindings" Version="1.0.2.120" />
<PackageReference Include="MailKit" Version="4.8.0" />
<PackageReference Include="Microsoft.Extensions.FileSystemGlobbing" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.FileSystemGlobbing" Version="9.0.0" />
<PackageReference Include="CommunityToolkit.HighPerformance" Version="8.3.2" />
<PackageReference Include="Argon2.Bindings" Version="1.16.1" />
<PackageReference Include="ModernUO.CodeGeneratedEvents.Annotations" Version="1.0.0" />
@ -47,7 +47,7 @@
<PackageReference Include="Zstd.Binaries" Version="1.6.0" />
<PackageReference Include="ModernUO.Serialization.Annotations" Version="2.9.1" />
<PackageReference Include="ModernUO.Serialization.Generator" Version="2.11.3" />
<PackageReference Include="ModernUO.Serialization.Generator" Version="2.12.10" />
</ItemGroup>
<ItemGroup>
<AdditionalFiles Include="Migrations/*.v*.json" />

View file

@ -21,8 +21,8 @@ ModernUO [![Discord](https://img.shields.io/discord/751317910504603701?logo=disc
[![Ubuntu 20+ LTS](https://img.shields.io/badge/-22LTS-E95420?logo=ubuntu&logoColor=E95420&labelColor=222222)](https://ubuntu.com/download/server)
<br />
[![Alpine 3.18+](https://img.shields.io/badge/-3.18-0D597F?logo=alpinelinux&logoColor=0D597F&labelColor=222222)](https://alpinelinux.org/downloads/)
[![Fedora 39+](https://img.shields.io/badge/-39-51a2da?logo=fedora&logoColor=51a2da&labelColor=222222)](https://getfedora.org/en/server/download/)
[![RedHat 8/9](https://img.shields.io/badge/-8-BE0000?logo=redhat&logoColor=BE0000&labelColor=222222)](https://access.redhat.com/downloads)
[![Fedora 40+](https://img.shields.io/badge/-40-51a2da?logo=fedora&logoColor=51a2da&labelColor=222222)](https://getfedora.org/en/server/download/)
[![RedHat 8+](https://img.shields.io/badge/-8-BE0000?logo=redhat&logoColor=BE0000&labelColor=222222)](https://access.redhat.com/downloads)
[![CentOS 9](https://img.shields.io/badge/-9-262577?logo=centos&logoColor=white&labelColor=222222)](https://www.centos.org/download/)
[![openSUSE 15+](https://img.shields.io/badge/-15-73BA25?logo=openSUSE&logoColor=73BA25&labelColor=222222)](https://get.opensuse.org/)
[![SUSE Enterprise 12 SP2+](https://img.shields.io/badge/-12%20SP2-0C322C?logo=suse&logoColor=30BA78&labelColor=222222)](https://www.suse.com/download/sles/)
@ -31,25 +31,25 @@ ModernUO [![Discord](https://img.shields.io/discord/751317910504603701?logo=disc
#### Required Frameworks
##### All Operating Systems
[![.NET](https://img.shields.io/badge/-8.0.8-5C2D91?logo=.NET&logoColor=white&labelColor=222222)](https://dotnet.microsoft.com/download/dotnet/8.0)
[![.NET](https://img.shields.io/badge/-9.0.0-5C2D91?logo=.NET&logoColor=white&labelColor=222222)](https://dotnet.microsoft.com/download/dotnet/9.0)
##### Windows
[![VC++ Redistributable 17](https://img.shields.io/badge/-Redist%2017-00599C?logo=cplusplus&logoColor=white&labelColor=222222)](https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170#visual-studio-2015-2017-2019-and-2022)
#### Development
[![git](https://img.shields.io/badge/-git-F05032?logo=git&logoColor=F05032&labelColor=222222)](https://git-scm.com/downloads)
[![.NET](https://img.shields.io/badge/-%208.0.401%20SDK-5C2D91?logo=.NET&logoColor=white&labelColor=222222)](https://dotnet.microsoft.com/download/dotnet/8.0)
[![.NET](https://img.shields.io/badge/-%209.0.101%20SDK-5C2D91?logo=.NET&logoColor=white&labelColor=222222)](https://dotnet.microsoft.com/download/dotnet/9.0)
#### Supported IDEs
<p align="left"><a href="https://www.jetbrains.com/rider/download"><img height="64" title="Jetbrains Rider 2024.1+"
alt="Jetbrains Rider 2024.1+"
<p align="left"><a href="https://www.jetbrains.com/rider/download"><img height="64" title="Jetbrains Rider 2024.3+"
alt="Jetbrains Rider 2024.3+"
src="https://user-images.githubusercontent.com/3953314/133473479-734e425c-fbb6-433a-af2d-2cc8444398e8.png"></a><img
alt="space" width="32" src="https://user-images.githubusercontent.com/3953314/200151935-3c1521ec-16cb-487b-85a2-7454d347c585.png"><a href="https://code.visualstudio.com/download"><img height="64" title="VSCode"
alt="VSCode"
src="https://user-images.githubusercontent.com/3953314/200161017-7697171f-8f13-4829-95d0-8a25b59ee4c9.png"></a><img alt="space" width="32"
src="https://user-images.githubusercontent.com/3953314/200151935-3c1521ec-16cb-487b-85a2-7454d347c585.png"><a href="https://visualstudio.microsoft.com/vs/community/"><img height="64" title="Visual Studio 2022 v17.10+"
alt="Visual Studio 2022 v17.10+"
src="https://user-images.githubusercontent.com/3953314/200151935-3c1521ec-16cb-487b-85a2-7454d347c585.png"><a href="https://visualstudio.microsoft.com/vs/community/"><img height="64" title="Visual Studio 2022 v17.12+"
alt="Visual Studio 2022 v17.12+"
src="https://user-images.githubusercontent.com/3953314/133473556-35fd48b4-6460-49b1-b7c5-b4a8c529cc04.png"></a></p>
## Getting Started

View file

@ -5,7 +5,6 @@ trigger:
variables:
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
DOTNET_SYSTEM_GLOBALIZATION_INVARIANT: 1
jobs:
- job: BuildWindows
@ -14,15 +13,14 @@ jobs:
vmImage: 'windows-latest'
steps:
- task: UseDotNet@2
displayName: 'Install .NET 8'
inputs:
packageType: sdk
version: '8.0.x'
- task: NuGetAuthenticate@1
- script: ./publish.cmd Release
displayName: 'Build'
- powershell: ./.github/porcelain.ps1
displayName: Migration Changes
- script: dotnet test --no-restore
displayName: 'Test'
- task: UseDotNet@2
displayName: 'Install .NET 9'
inputs:
useGlobalJson: true
- task: NuGetAuthenticate@1
- script: ./publish.cmd Release
displayName: 'Build'
- powershell: ./.github/porcelain.ps1
displayName: Migration Changes
- script: dotnet test --no-restore
displayName: 'Test'

View file

@ -18,7 +18,7 @@ Everything is run from the _Distribution_ folder.
Using _terminal_, run:
```bash
cd Distribution
dotnet run ModernUO.dll
dotnet ModernUO.dll
```
=== "Game Files"

View file

@ -1,6 +1,6 @@
{
"sdk": {
"version": "8.0.0",
"version": "9.0.101",
"rollForward": "latestMajor",
"allowPrerelease": false
}

View file

@ -1,4 +1,4 @@
{
"$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json",
"version": "0.13.6"
"version": "0.13.7"
}