-
Notifications
You must be signed in to change notification settings - Fork 7
Mod Updating Guide
Each time Everest upgrades its .NET runtime 🔗 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.
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 🔗, 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 (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 🔗.
Go to the Code Mod Core Migration Guide for a guide on how to upgrade.
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'
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.
Home
Contributing
FAQ
Useful Links
Your First Custom Map
Your First Texture Pack
Mod Setup
Custom Maps
Texture Packs
Uploading Mods
Generated Dialog Keys
Reference Code Mod🔗
Vanilla Audio IDs
Vanilla Decal Registry Reference
Character Portraits
Mod Structure
Debug Mode
Debug Map
Command Line Arguments
Environment Variables
Install Issues
Common Crashes
Latency Guide
everest.yaml Setup
Mapping FAQ
Map Metadata
Vanilla Metadata Reference
Adding Custom Dialogue
Overworld Customisation
Entity & Trigger Documentation
Custom Entity List🔗
Camera
Ahorn Scripts
Custom Tilesets
Tileset Format Reference
Stylegrounds
Reskinning Entities
Skinmods
Decal Registry
Chapter Complete Screen
Custom Portraits
Adding Custom Audio
Advanced Custom Audio
Code Mod Setup
Making Code Mods
Settings, SaveData and Session
Everest Events
Understanding Input
Logging
Cross-Mod Functionality
Recommended Practices
Mod Updating Guide
Custom Entities, Triggers and Stylegrounds
Lönn Integration🔗
Custom Events
Adding Sprites
Adding Preexisting Audio