Mod Updating Guide - EverestAPI/Resources GitHub Wiki
Each time Everest upgrades its .NET runtime :link: it will cause mods to have to update their source code accordingly to build with the newer runtime. Luckily such changes are often simple.
There are two main kinds of mods: Legacy Mods and Core Mods, each requiring a different set of changes. Both explained in detail down below.
Checking if a mod is a Legacy Mod or a Core Mod
Legacy mods target .NET Framework, while Core mods target .NET Core, if you know how to identify that, you can jump below to the appropriate section.
You can determine whether a mod is Legacy or Core by opening it's .csproj
file (if you have multiple of those, you probably know what you're doing already). Seek the TargetFramework
tag (or TargetFrameworks
) and check the value in there:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netXXX</TargetFramework>
<AssemblyName>CelesteMod</AssemblyName>
...
- The value is
net452
: It is a Legacy Mod. - The value is
netX.0
where X is greater or equal than 7: It is a Core Mod. TargetFramework
does not appear: The mod likely does not use a sdk-style project :link:, but rather an older version of project files. Chances are the mod is a Legacy mod, but to be sure: look forTargetFrameworkVersion
instead, ifv4.5.2
appears then it is a Legacy Mod.
Legacy Mods
Legacy Mods (also known as "non-Core Mods") are mods that do not target a Core Everest version, consequently those use .NET Framework with Legacy Everest versions. Legacy Everest was discontinued and the last stable version was Everest 4449 :link:.
Upgrading a Legacy Mod
Go to the Code Mod Core Migration Guide for a guide on how to upgrade.
Core Mods
Core Mods are mods which target some Core Everest version. However, this may still not be enough to build with the latest .NET Core Everest versions. A version mismatch is signified by a build error similar to the following: Error CS1705 : Assembly 'Celeste' with identity 'Celeste, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' uses 'System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' which has a higher version than referenced assembly 'System.Runtime' with identity 'System.Runtime, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
Upgrading a Core Mod
[!WARNING] Changing the target framework version without adjusting the Everest dependency in the everest.yaml will cause crashes on older Everest versions.
- Make sure you have the current stable version of Everest installed. Using a newer .NET version will make your mod incompatible with Everest versions using an older .NET version, so if you accidentally build against a development version that uses a newer .NET version, your mod will not work on stable Everest.
- Change the Everest dependency in your everest.yaml file to the current stable version. Otherwise, your mod will crash older Everest versions instead of telling players to update.
- Change the
TargetFramework
value in the .csproj file to the one currently used by Everest. The latest Everest version uses .NET 8, which corresponds tonet8.0
. Using any other version will fail to build the mod.