Skip to content

Commit ee10435

Browse files
Feature/upgradeguideupdate (#194)
* Updated Migration document for 3.8.x upgrade * Update TOC and document name * Finalize migration document
1 parent 196364a commit ee10435

File tree

2 files changed

+95
-43
lines changed

2 files changed

+95
-43
lines changed

articles/migration/migrate_38.md

Lines changed: 94 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,84 +1,125 @@
11
---
2-
title: Migrating from 3.8.0
3-
description: A guide on migrating a MonoGame v3.8.0 project to the current version of MonoGame.
2+
title: Upgrading MonoGame from 3.8.x to latest
3+
description: A guide on upgrading a MonoGame v3.8 project to the current 3.8.4.1+ releases of MonoGame.
44
---
55

6-
Migrating from 3.8.0 should be straightforward for most platforms.
6+
Upgrading existing projects from earlier 3.8 releases should be straightforward for most platforms.
77

8-
The major difference is that 3.8.1 now requires .NET 6 and Visual Studio 2022. You can follow the [environment setup tutorial](../getting_started/index.md) to make sure that you are not missing any components.
8+
> [!NOTE]
9+
> If you are migrating/upgrading from [XNA](./migrate_xna.md) or [MonoGame 3.7 or earlier](./migrate_37.md) then check the dedicated guides for those actions before returning here.
10+
11+
- The critical difference from pre 3.8.2 builds, [is that the MGCB Editor is no longer a global .NET tool](#addupdate-dotnet-toolsjson-configuration) and the MGCB editor is now included as part of the specific project through the use of the dotnet tooling configuration `dotnet-tools.json` file located in the `.config` folder in your solution/project.
12+
13+
- The major difference from 3.8.4 onwards is that we recommend using .NET 9 in your client project, but it is not mandatory, we are also simplifying the `csproj` configuration to reduce management for developers from 3.8.4.1.
914

10-
The MGCB Editor is no longer a global .NET tool and we recommend that you use the new Visual Studio 2022 extension which helps with accessing it without the need of CLI commands.
15+
> For iOS/Android however, DotNet 9 at a minimum is Mandatory, [see details here](#iosipados-and-android-considerations).
16+
17+
You can follow the [environment setup tutorial](../getting_started/index.md) to make sure that you are not missing any components.
1118

1219
> [!NOTE]
13-
> It is also recommended that you uninstall the older global versions of the .NET tools as described below.
20+
> If you are using Visual Studio 2022, we recommend that you use the MonoGame extension which helps with accessing the MGCB editor without the need of CLI commands.
1421
15-
## WindowsDX, DesktopGL, and UWP
22+
The process of updating your project should be fairly quick and painless without having to change your code or your content project.
1623

17-
Upgrading from 3.8.0 should be as straightforward as upgrading your ```TargetFramework``` and MonoGame version.
24+
## Contents
1825

19-
Edit your csproj file to change your ```TargetFramework```:
26+
- [Updating DotNet Target Framework](#updating-the-dotnet-target-framework)
27+
- [Update MonoGame references](#update-monogame-references)
28+
- [Add/Update `dotnet-tools.json` Configuration](#addupdate-dotnet-toolsjson-configuration)
29+
- [Remove `RestoreDotNetTools` section from csproj](#remove-restoredotnettools-section-from-csproj)
30+
- [iOS/iPadOS, and Android Considerations](#iosipados-and-android-considerations)
2031

21-
```xml
22-
<TargetFramework>net6.0</TargetFramework>
23-
```
32+
## Updating the DotNet Target Framework
2433

25-
Then edit your MonoGame ```PackageReference``` to point to 3.8.1:
34+
Modern MonoGame projects now use the DotNet framework (older projects used to rely on the NetCore/NetFramework libraries). As MonoGame has used DotNet project templates since 3.8.x, you only need to update the `TargetFramework` element of any `csproj` files referencing MonoGame libraries, namely:
35+
36+
- Replace any `<TargetFramework>` entries with the following:
2637

2738
```xml
28-
<PackageReference Include="MonoGame.Framework.{Platform}" Version="3.8.1.*" />
29-
<PackageReference Include="MonoGame.Content.Builder.Task" Version="3.8.1.*" />
39+
<TargetFramework>net9.0</TargetFramework>
3040
```
3141

32-
### Accessing MGCB and MCGB Editor without a global tool
42+
> [!NOTE]
43+
> Using `DotNet 9` is only a **recommendation**, you can use any version of DotNet (from 8.0 and above) so long as it supports the MonoGame DotNet 8 dependency. This includes the upcoming DotNet 10 LTS.
3344
34-
The MGCB Editor is no longer a .NET global tool, and does not need to be installed or registered. When migrating from 3.8.0, it is recommended that you **uninstall** the global versions of the tools. You can accomplish that with these commands:
45+
Make sure to update any and all projects in your solution, especially you have a multi-project solution similar to those in the [MonoGame.Samples](https://github.com/MonoGame/MonoGame.Samples/tree/3.8.4/Platformer2D)
3546

36-
```sh
37-
dotnet tool uninstall dotnet-mgcb -g
38-
dotnet tool uninstall dotnet-2mgfx -g
39-
dotnet tool uninstall dotnet-mgcb-editor -g
40-
```
47+
## Update MonoGame references
48+
49+
Make sure you update the MonoGame references to the latest version, this can be achieved by either:
50+
51+
- Editing the `csproj` files that reference MonoGame to the latest version.
52+
53+
> [!NOTE]
54+
> The MonoGame templates set the Version number as `Version="3.8.*"`, this means that it will use the LATEST public version of MonoGame (not including preview releases) that is available.
55+
>
56+
> However, this does mean your `tools` configuration can become out of sync with your project and potentially cause issue.
4157
42-
::: tip
43-
**Do not** run the ``` dotnet tool install ``` on 3.8.1, as it would break 3.8.1.
44-
:::
58+
- Use the [Updating NuGet package dependencies](../getting_to_know/howto/HowTo_Install_Preview_Release.md#updating-nuget-package-dependencies) documentation as part of the "Preview Release installation instructions", which states you should run the following commands (the example is for `DesktopGL`, use other platforms accordingly):
4559

46-
You will also need to setup a dotnet-tools configuration file.
60+
```dotnetcli
61+
dotnet add package MonoGame.Framework.DesktopGL -v 3.8.4.1
62+
dotnet add package MonoGame.Content.Builder.Task -v 3.8.4.1
63+
```
4764
48-
- Next to your ```.csproj```create a folder named ```.config```
49-
- Add a file within the folder named ```dotnet-tools.json``` with the following content:
65+
> [!NOTE]
66+
> The `MonoGame.Content.Builder.Task` is only needed for client projects and not libraries.
5067
51-
```json
68+
This will ensure your project is using the intended version of MonoGame.
69+
70+
> [!IMPORTANT]
71+
> Always ensure your `dotnet-tools.json` version matches any updates to the version of MonoGame you are using, as detailed in the next section.
72+
73+
## Add/Update `dotnet-tools.json` Configuration
74+
75+
MonoGame DotNet projects currently **Require** DotNet tools configuration to be able to locate and run the `MGCB` editor which is installed locally per project (preventing issues when working with multiple projects using different versions of MonoGame).
76+
77+
> [!IMPORTANT]
78+
> The MGCB Editor is no longer a .NET global tool, and does not need to be installed or registered separately. When migrating from 3.8.0, it is recommended that you **uninstall** the global versions of the tools. You can accomplish that with these commands:
79+
>
80+
> ```sh
81+
> dotnet tool uninstall dotnet-mgcb -g
82+
> dotnet tool uninstall dotnet-2mgfx -g
83+
> dotnet tool uninstall dotnet-mgcb-editor -g
84+
> ```
85+
86+
You can either copy the `config` folder with the configuration from a new project template (e.g. `dotnet new mgdesktopgl -o <project name>`),
87+
or alternatively you can do the following:
88+
89+
- Create a new folder in the root of your project named `.config`.
90+
- Add a new file called `dotnet-tools.json` and replace its contents with the following:
91+
92+
```text
5293
{
5394
"version": 1,
5495
"isRoot": true,
5596
"tools": {
5697
"dotnet-mgcb": {
57-
"version": "3.8.1.303",
98+
"version": "3.8.4.1",
5899
"commands": [
59100
"mgcb"
60101
]
61102
},
62103
"dotnet-mgcb-editor": {
63-
"version": "3.8.1.303",
104+
"version": "3.8.4.1",
64105
"commands": [
65106
"mgcb-editor"
66107
]
67108
},
68109
"dotnet-mgcb-editor-linux": {
69-
"version": "3.8.1.303",
110+
"version": "3.8.4.1",
70111
"commands": [
71112
"mgcb-editor-linux"
72113
]
73114
},
74115
"dotnet-mgcb-editor-windows": {
75-
"version": "3.8.1.303",
116+
"version": "3.8.4.1",
76117
"commands": [
77118
"mgcb-editor-windows"
78119
]
79120
},
80121
"dotnet-mgcb-editor-mac": {
81-
"version": "3.8.1.303",
122+
"version": "3.8.4.1",
82123
"commands": [
83124
"mgcb-editor-mac"
84125
]
@@ -87,23 +128,34 @@ You will also need to setup a dotnet-tools configuration file.
87128
}
88129
```
89130

90-
Please note that you cannot use the ```3.8.1.*``` wildcard in the ```dotnet-tools.json``` file (tool versions have to be fully qualified). We strongly recommand that the versions match the MonoGame version referenced in your ```.csproj``` (if you are using the ```*``` wildcard, make sure that they do not end up mismatching if the nugets are updated without you noticing).
131+
> [!NOTE]
132+
> Please note that you cannot use the ```3.8.*``` wildcard in the ```dotnet-tools.json``` file (tool versions have to be fully qualified). We strongly recommend that the versions match the MonoGame version referenced in your ```.csproj``` (if you are using the ```*``` wildcard, make sure that they do not end up mismatching if the NuGet packages are updated without you noticing).
133+
134+
The file is the same regardless of which platform / target you are intending to use. If you have a multi-project solution, you only need a **SINGLE** configuration at the root of the project for all client projects.
91135

92-
You will also need to add this to your ```.csproj```:
136+
## Remove `RestoreDotNetTools` section from csproj
137+
138+
From `3.8.4.1` and above, the `RestoreDotNetTools` section is no longer required in client project `csproj` files, as the processing is now handled within the MonoGame deliverables.
139+
140+
> [!NOTE]
141+
> Earlier versions of MonoGame, e.g. 3.8.0 do not have this configuration in the project template, if your `csproj` does not have a `RestoreDotNetTools` element, you can safely ignore this section.
93142
94143
```xml
95-
<Target Name="RestoreDotnetTools" BeforeTargets="CollectPackageReferences">
144+
<Target Name="RestoreDotNetTools" BeforeTargets="Restore">
96145
<Message Text="Restoring dotnet tools" Importance="High" />
97146
<Exec Command="dotnet tool restore" />
98147
</Target>
99148
```
100149

101-
With these changes, .NET will automatically install the MGCB Editor for you when launching Visual Studio 2022 (if you want to install it manually and skip adding the Target, run ```dotnet tool restore``` within the project directory).
150+
> [!TIP]
151+
> The XML has changed over versions with various messages and layout, but the section to remove is always titled `Name="RestoreDotNetTools"`
102152
103-
Then, if you installed the Visual Studio extension, you should also be able to just double-click an ```.mgcb``` file to open the MGCB Editor. You can also open the MGCB Editor with the CLI via ```dotnet mgcb-editor``` when executed from within the project directory.
153+
Simply remove this section safely from any and all `csproj` files located in your solution that are dependent on MonoGame.
104154

105-
This new configuration has the advantage of allowing to have per-project versions of MGCB and its Editor (instead of per-machine like a global tool).
155+
## iOS/iPadOS, and Android Considerations
106156

107-
## iOS/iPadOS, and Android
157+
DotNet 9 is MANDATORY for iOS and Android due to platform requirements, as well as the following configurations:
108158

109-
.NET 6 introduced breaking changes in how csproj are defined for iOS/iPadOS and Android. We recommand that you create new projects using the 3.8.1 templates and that you copy over your project files there.
159+
- MonoGame 3.8.4.1 is **REQUIRED** to comply with the Google Policies on 16kb pages and other affordances.
160+
- The Android `targetSdkVersion` in the `AndroidManifest.xml` **MUST** be a minimum "35" to comply with the latest Google policies. The templates set the minimum to `21` which is safe, only the `TARGET` SDK is critical.
161+
- iOS **MUST** use a minimum `SupportedOSPlatformVersion` of `12.2` in both the `csproj` and in the `info.plist` configuration for the project.

articles/toc.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ items:
9494
href: migration/migrate_xna.md
9595
- name: Migrating from 3.7
9696
href: migration/migrate_37.md
97-
- name: Migrating from 3.8.0
97+
- name: Upgrading 3.8.x to latest
9898
href: migration/migrate_38.md
9999
- name: Updating Versions
100100
href: migration/updating_versions.md

0 commit comments

Comments
 (0)