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, "isRoot": true,
"tools": { "tools": {
"modernuoschemagenerator": { "modernuoschemagenerator": {
"version": "2.11.3", "version": "2.12.10",
"commands": [ "commands": [
"ModernUOSchemaGenerator" "ModernUOSchemaGenerator"
] ]

View file

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

View file

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

View file

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

View file

@ -5,7 +5,7 @@
<RootNamespace>Server.Tests</RootNamespace> <RootNamespace>Server.Tests</RootNamespace>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <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" Version="2.9.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2"> <PackageReference Include="xunit.runner.visualstudio" Version="2.8.2">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>

View file

@ -66,7 +66,7 @@ public class ArtData : IDisposable
Span<ushort> buffer = stackalloc ushort[entry.Size / 2]; Span<ushort> buffer = stackalloc ushort[entry.Size / 2];
_dataStream.Seek(entry.Offset, SeekOrigin.Begin); _dataStream.Seek(entry.Offset, SeekOrigin.Begin);
_dataStream.Read(MemoryMarshal.AsBytes(buffer)); _ = _dataStream.Read(MemoryMarshal.AsBytes(buffer));
var width = buffer[2]; var width = buffer[2];
var height = buffer[3]; 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); using FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
var buffer = GC.AllocateUninitializedArray<byte>((int)fs.Length, true); var buffer = GC.AllocateUninitializedArray<byte>((int)fs.Length, true);
fs.Read(buffer); _ = fs.Read(buffer);
// VS_VERSION_INFO (unicode) // VS_VERSION_INFO (unicode)
Span<byte> vsVersionInfo = stackalloc byte[] 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) public virtual void SendWorldPacketTo(NetState ns, ReadOnlySpan<byte> world = default)
{ {
if (world != null) if (world != ReadOnlySpan<byte>.Empty)
{ {
ns?.Send(world); ns?.Send(world);
return; return;

View file

@ -98,7 +98,7 @@ public static class Localization
{ {
using var fs = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read); using var fs = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read);
Span<byte> header = stackalloc byte[6]; Span<byte> header = stackalloc byte[6];
fs.Read(header); _ = fs.Read(header);
byte[] data; byte[] data;
BufferReader br; BufferReader br;
@ -120,7 +120,7 @@ public static class Localization
else else
{ {
data = GC.AllocateUninitializedArray<byte>((int)fs.Length - 6); data = GC.AllocateUninitializedArray<byte>((int)fs.Length - 6);
fs.Read(data); _ = fs.Read(data);
br = new BufferReader(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) public void Send(ReadOnlySpan<byte> span)
{ {
if (span == null || this.CannotSendPackets()) if (span == ReadOnlySpan<byte>.Empty || this.CannotSendPackets())
{ {
return; return;
} }

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -4,7 +4,7 @@
<Configurations>Debug;Release;Analyze</Configurations> <Configurations>Debug;Release;Analyze</Configurations>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <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" Version="2.9.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2"> <PackageReference Include="xunit.runner.visualstudio" Version="2.8.2">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>

View file

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

View file

@ -39,7 +39,7 @@
</ProjectReference> </ProjectReference>
<PackageReference Include="LibDeflate.Bindings" Version="1.0.2.120" /> <PackageReference Include="LibDeflate.Bindings" Version="1.0.2.120" />
<PackageReference Include="MailKit" Version="4.8.0" /> <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="CommunityToolkit.HighPerformance" Version="8.3.2" />
<PackageReference Include="Argon2.Bindings" Version="1.16.1" /> <PackageReference Include="Argon2.Bindings" Version="1.16.1" />
<PackageReference Include="ModernUO.CodeGeneratedEvents.Annotations" Version="1.0.0" /> <PackageReference Include="ModernUO.CodeGeneratedEvents.Annotations" Version="1.0.0" />
@ -47,7 +47,7 @@
<PackageReference Include="Zstd.Binaries" Version="1.6.0" /> <PackageReference Include="Zstd.Binaries" Version="1.6.0" />
<PackageReference Include="ModernUO.Serialization.Annotations" Version="2.9.1" /> <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>
<ItemGroup> <ItemGroup>
<AdditionalFiles Include="Migrations/*.v*.json" /> <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) [![Ubuntu 20+ LTS](https://img.shields.io/badge/-22LTS-E95420?logo=ubuntu&logoColor=E95420&labelColor=222222)](https://ubuntu.com/download/server)
<br /> <br />
[![Alpine 3.18+](https://img.shields.io/badge/-3.18-0D597F?logo=alpinelinux&logoColor=0D597F&labelColor=222222)](https://alpinelinux.org/downloads/) [![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/) [![Fedora 40+](https://img.shields.io/badge/-40-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) [![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/) [![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/) [![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/) [![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 #### Required Frameworks
##### All Operating Systems ##### 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 ##### 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) [![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 #### Development
[![git](https://img.shields.io/badge/-git-F05032?logo=git&logoColor=F05032&labelColor=222222)](https://git-scm.com/downloads) [![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 #### Supported IDEs
<p align="left"><a href="https://www.jetbrains.com/rider/download"><img height="64" title="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.1+" alt="Jetbrains Rider 2024.3+"
src="https://user-images.githubusercontent.com/3953314/133473479-734e425c-fbb6-433a-af2d-2cc8444398e8.png"></a><img 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="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" 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/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+" 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.10+" alt="Visual Studio 2022 v17.12+"
src="https://user-images.githubusercontent.com/3953314/133473556-35fd48b4-6460-49b1-b7c5-b4a8c529cc04.png"></a></p> src="https://user-images.githubusercontent.com/3953314/133473556-35fd48b4-6460-49b1-b7c5-b4a8c529cc04.png"></a></p>
## Getting Started ## Getting Started

View file

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

View file

@ -18,7 +18,7 @@ Everything is run from the _Distribution_ folder.
Using _terminal_, run: Using _terminal_, run:
```bash ```bash
cd Distribution cd Distribution
dotnet run ModernUO.dll dotnet ModernUO.dll
``` ```
=== "Game Files" === "Game Files"
@ -27,4 +27,4 @@ Everything is run from the _Distribution_ folder.
!!! Tip !!! Tip
Game files are not directly distributed in ModernUO, find the latest version to download these at [client download](https://uo.com/Client-Download/) Game files are not directly distributed in ModernUO, find the latest version to download these at [client download](https://uo.com/Client-Download/)

View file

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

View file

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