Difference between revisions of "Modding:IDE reference"

From Stardew Valley Wiki
Jump to navigation Jump to search
(copy from canimod.com with permission, dual-licensed CC BY-NC-SA for compatibility with wiki. Only author is Pathoschild.)
 
(41 intermediate revisions by 10 users not shown)
Line 1: Line 1:
<pre>
+
←[[Modding:Index|Index]]
---
 
layout: default
 
title: Creating a SMAPI mod » IDE primer
 
intro: >
 
  This page is a quick reference for how to use Visual Studio 2017 or MonoDevelop/Xamarin when
 
  creating or editing a SMAPI mod. See <em><a href="creating-a-smapi-mod">creating a SMAPI mod</a></em>
 
  for the main guide.
 
---
 
  
## Before you start
+
This page is a quick reference for how to use Visual Studio 2017 or MonoDevelop/Visual Studio for Mac when creating or editing a SMAPI mod. See [[Modding:Modder Guide/Get Started|Modding:Modder Guide]] for the main guide.
* You should install [Visual Studio 2017 Community](https://www.visualstudio.com/vs/community/) (on Windows) or [MonoDevelop](http://www.monodevelop.com/) (on Linux/Mac).
 
* Reviewing [_C# Fundamentals for Absolute Beginners_](https://mva.microsoft.com/en-us/training-courses/c-fundamentals-for-absolute-beginners-16169)
 
is strongly recommended if you're new to programming C#.
 
* Here are some basic terms to remember:
 
  
  term    | definition
+
==Before you start==
  -------- | ----------
+
<ul>
  IDE      | The program used to edit, run, and compile your code (short for _Integrated Development Environment_). The main IDEs are Visual Studio on Windows, and MonoDevelop/Xamarin on Linux/Mac.
+
<li>You should install [https://visualstudio.microsoft.com/vs/community/ Visual Studio Community] (Windows), [http://www.monodevelop.com/ MonoDevelop] (Linux), or [https://visualstudio.microsoft.com/vs/mac/ Visual Studio for Mac] (Mac).</li>
  DLL      | The file with a `.dll` extension which contains your compiled code (short for _Dynamic Link Library_). This is the file that SMAPI reads when loading your mod.
+
<li>Reviewing [https://mva.microsoft.com/en-us/training-courses/c-fundamentals-for-absolute-beginners-16169 ''C# Fundamentals for Absolute Beginners''] is strongly recommended if you're new to programming C#.</li>
  project  | A collection of source code + configuration + resources (like images) you edit in the IDE. Each project is compiled into its own DLL.
+
<li>Here are some basic terms to remember:
  solution | A collection of projects with some global settings. The solution itself isn't compiled, but it enables some convenient features (like letting projects easily reference each other).
 
  
## Create a mod project
+
{| class="wikitable"
<section id="create-project"></section>
+
|-
 +
! term !! definition
 +
|-
 +
| IDE || The program used to edit, run, and compile your code (short for ''Integrated Development Environment''). The main IDEs are Visual Studio on Windows, and MonoDevelop/Visual Studio for Mac on Linux/Mac.
 +
|-
 +
| DLL || The file with a <samp>.dll</samp> extension which contains your compiled code (short for ''Dynamic Link Library''). This is the file that SMAPI reads when loading your mod.
 +
|-
 +
| project || A collection of source code + configuration + resources (like images) you edit in the IDE. Each project is compiled into its own DLL.
 +
|-
 +
| solution || A collection of projects with some global settings. The solution itself isn't compiled, but it enables some convenient features (like letting projects easily reference each other).
 +
|}</li>
 +
</ul>
  
 +
==Create a mod project==
 +
<span id="create-project"></span>
 
Before you can write your mod code, you need to create a solution and project to contain it.
 
Before you can write your mod code, you need to create a solution and project to contain it.
  
### In Visual Studio 2017
+
===Windows (Visual Studio 2019/2022)===
 +
# Open Visual Studio 2019/2022.
 +
# Click ''Create a new project'' from the start screen.<br />[[File:Modding - IDE reference - create project (Visual Studio 1).png]]
 +
# Filter by "C#" and "Library", then choose ''Class Library'' and click ''Next''. Make sure you '''don't''' choose ''Class Library (.NET Framework)'' which won't work.<br />[[File:Modding - IDE reference - create project (Visual Studio 2).png| 589px]]
 +
# In the ''configure your new project'' window: <ol><li>Enter a descriptive mod name. By convention, the name should be one word with mixed caps (like "PineapplesEverywhere").</li><li>Make sure "Place solution and project in the same directory" is ''not'' checked.</li><li>Click "Create" to to create the project.</li></ol>[[File:Modding - IDE reference - create project (Visual Studio 3).png|800px]]
 +
# Next, select NET 6.0 and click "Create" to create the project. For VS 2022, this will be on the next page. <br />[[File:Screenshot 2021-12-16 140835.png]]
  
1. Open Visual Studio 2017.
+
===Linux (MonoDevelop)===
2. Click _File » New » Project_ from the menu bar:
+
# Open MonoDevelop.
  ![](images/creating-a-smapi-mod-ide-primer/create-project-vs-1.png)
+
# Click ''File » New Solution'' from the menu bar:<br />[[File:Modding - IDE reference - create project (MonoDevelop 1).png]]
3. In the 'New Project' window, choose _Visual C# » Class Library (.NET Framework)_:
+
# In the 'New Project' window, choose ''.NET » Library'' and click ''Next'':<br />[[File:Modding - IDE reference - create project (MonoDevelop 2).png]]
  ![](images/creating-a-smapi-mod-ide-primer/create-project-vs-2.png)
+
# Enter a descriptive mod name. By convention, the name should be one word with mixed caps (like "PineapplesEverywhere"):<br />[[File:Modding - IDE reference - create project (MonoDevelop 3).png]]
4. Enter a descriptive mod name. By convention, the name should be one word with mixed caps (like
+
# Make sure "create a project directory within the solution directory" is checked, and click ''Create'':<br />[[File:Modding - IDE reference - create project (MonoDevelop 4).png]]
  "PineapplesEverywhere"):
 
  ![](images/creating-a-smapi-mod-ide-primer/create-project-vs-3.png)
 
5. Make sure "create directory for solution" is checked, and click _OK_:
 
  ![](images/creating-a-smapi-mod-ide-primer/create-project-vs-4.png)
 
  
### In MonoDevelop/Xamarin
+
===MacOS (Visual Studio 2019 for Mac)===
  
1. Open MonoDevelop/Xamarin.
+
# Install the .NET 5.0 SDK if you haven't already (link: [https://dotnet.microsoft.com/en-us/download/dotnet/5.0]).<br />[[File:1a NET website.png|600px]]
2. Click _File » New Solution_ from the menu bar:
+
# Open Visual Studio for Mac.
  ![](images/creating-a-smapi-mod-ide-primer/create-project-monodev-1.png)
+
# Click ''File » New Solution'' from the menu bar:<br />[[File:VS Mac 1 newsolution.png|600px]]
3. In the 'New Project' window, choose _.NET » Library_ and click _Next_:
+
# Select the correct type of class library:<br />[[File:VS Mac 2 createlibrary.png|600px]]
  ![](images/creating-a-smapi-mod-ide-primer/create-project-monodev-2.png)
+
# Set it to target '''.NET 5.0.''':<br />[[File:VS Mac 3 setframework.png|600px]]
4. Enter a descriptive mod name. By convention, the name should be one word with mixed caps (like
+
# Enter a descriptive mod name for the project. By convention, the name should be one word with mixed caps (like "PineapplesEverywhere"):<br />[[File:VS Mac 4 nameproject.png|600px]]
  "PineapplesEverywhere"):
 
  ![](images/creating-a-smapi-mod-ide-primer/create-project-monodev-3.png)
 
5. Make sure "create a project directory within the solution directory" is checked, and click _Create_:
 
  ![](images/creating-a-smapi-mod-ide-primer/create-project-monodev-4.png)
 
  
## Set the target framework
+
===MacOS (Visual Studio for Mac)===
<section id="set-target-framework"></section>
+
# Open Visual Studio for Mac.
 +
# Click ''File » New Solution'' from the menu bar:<br />[[File:Modding - IDE reference - create project (Visual Studio for Mac 1).png|200px]]
 +
# In the 'New Project' window, choose ''.NET » Library'' and click ''Next'':<br />[[File:Modding - IDE reference - create project (Visual Studio for Mac 2).png|750px]]
 +
# Enter a descriptive mod name. By convention, the name should be one word with mixed caps (like "PineapplesEverywhere"):<br />[[File:Modding - IDE reference - create project (Visual Studio for Mac 3).png|750px]]
 +
# Make sure "create a project directory within the solution directory" is checked, and click ''Create'':<br />[[File:Modding - IDE reference - create project (Visual Studio for Mac 4).png|750px]]
  
The 'target framework' is the version of .NET Framework your code uses, which affects the version
+
==Set the target framework==
needed to run your mod. The recommended target framework is .NET Framework 4.5, which is the
+
<span id="set-target-framework"></span>
version SMAPI itself targets.
+
The 'target framework' is the version of .NET your code uses, which affects the version needed to run your mod. The recommended target framework is .NET 5.0, which is the version SMAPI itself targets. '''Please find the subsection below for your OS''' (Windows/Mac). '''You cannot use .NET 6.0'''.
  
### In Visual Studio 2017
+
(yes, we know .NET 5.0 is past EOL.)
  
1. Open the Solution Explorer pane. If it's not visible, click _View » Solution Explorer_
+
===In Windows Visual Studio 2019/2022===
  from the menu:
+
'''NOTE: Visual Studio 2017 MAY no longer be compatible with creating mods!''' If you followed [[Modding:Modder_Guide/Get_Started]] and receive errors, from the code that page instructed be copy and pasted, with regards to helper. Events in the Entry(IModhelper helper) method and ButtonPressedEventArgs from the Entry(IModHelper helper) method, try the project-creation and code-copy/paste process again with Visual Studio 2019/2022 instead.
  ![](images/creating-a-smapi-mod-ide-primer/show-solution-pane-vs.png)
 
2. From the Solution Explorer, right-click on the project and choose _Properties_: 
 
  ![](images/creating-a-smapi-mod-ide-primer/change-target-framework-vs-1.png)
 
3. On the _Application_ tab, change the _Target Framework_ dropdown to _.NET Framework 4.5_: 
 
  ![](images/creating-a-smapi-mod-ide-primer/change-target-framework-vs-2.png)
 
4. A dialogue may appear asking you to confirm the change. Click 'Yes' to confirm: 
 
  ![](images/creating-a-smapi-mod-ide-primer/change-target-framework-vs-3.png)
 
  
### In MonoDevelop/Xamarin
 
  
1. Open the Solution pad. If it's not visible, click _View » Pads » Solution_ from the
+
# Open the Solution Explorer pane. If it's not visible, click ''View » Solution Explorer'' from the menu:<br />[[File:Modding - IDE reference - show solution pane (Visual Studio).png]]
  menu:
+
# From the Solution Explorer, right-click on the project and choose ''Properties'':<br />[[File:Modding - IDE reference - change target framework (Visual Studio 1).png]]
  ![](images/creating-a-smapi-mod-ide-primer/show-solution-pane-monodev.png)
+
# On the ''Application'' tab, change the ''Target Framework'' dropdown to ''.NET 5.0'':<br />[[File:Modding - IDE reference - change target framework (Visual Studio 2).png|800px]]
2. From the Solution pad, right-click on the project and choose _Options_:
+
# A dialogue may appear asking you to confirm the change. Click 'Yes' to confirm:<br />[[File:Modding - IDE reference - change target framework (Visual Studio 3).png]]
  ![](images/creating-a-smapi-mod-ide-primer/change-target-framework-monodev-1.png)
 
3. On the _Build » General_ tab, change the _Target Framework_ dropdown to _Mono / .NET 4.5_:
 
  ![](images/creating-a-smapi-mod-ide-primer/change-target-framework-monodev-2.png)
 
  
## Add a file
+
===In Visual Studio 2019 for Mac===
<section id="add-file"></section>
 
  
### In Visual Studio 2017
+
If you followed the instructions above to set up your project, your framework should already be set to .NET 5.0. However, if you picked the wrong class library or you just want to check, you can follow these steps to look at the .csproj file, which is basically equivalent to setting it manually. (If you're checking that it worked, don't replace the .csproj, just check it refers to .NET 5.0.)
  
1. Open the Solution Explorer pane. If it's not visible, click _View » Solution Explorer_
+
Unfortunately there doesn't appear to be a way to change the target framework using the GUI. However, it is very easy to follow the 1.5.5 migration guide steps:
  from the menu:
+
# Open the .csproj file for editing:<br />[[File:VS Mac 7 editcsproj.png|600px]]
  ![](images/creating-a-smapi-mod-ide-primer/show-solution-pane-vs.png)
+
# Replace your mod's <samp>.csproj</samp> file with this (where <code>EXAMLE_MOD_NAME</code> is your solution's name):
2. From the Solution Explorer pane, right-click on the project and choose _Add » New Item_: 
+
<syntaxhighlight lang="xml">
  ![](images/creating-a-smapi-mod-ide-primer/create-file-vs-1.png)
+
<Project Sdk="Microsoft.NET.Sdk">
3. From the 'Add New Item' window, choose the file type (usually _Visual C# Item » Class_): 
+
  <PropertyGroup>
  ![](images/creating-a-smapi-mod-ide-primer/create-file-vs-2.png)
+
    <AssemblyName>EXAMPLE_MOD_NAME</AssemblyName>
4. Enter a descriptive file name and click _Add_: 
+
    <RootNamespace>EXAMPLE_MOD_NAME</RootNamespace>
  ![](images/creating-a-smapi-mod-ide-primer/create-file-vs-3.png)
+
    <Version>1.0.0</Version>
 +
    <TargetFramework>net5.0</TargetFramework>
 +
  </PropertyGroup>
  
### In MonoDevelop/Xamarin
+
  <ItemGroup>
 +
    <PackageReference Include="Pathoschild.Stardew.ModBuildConfig" Version="4.0.0" />
 +
  </ItemGroup>
 +
</Project>
 +
</syntaxhighlight>
  
1. Open the Solution pad. If it's not visible, click _View » Pads » Solution_ from the
+
# If the mod uses [[Modding:Modder Guide/APIs/Harmony|Harmony]], add <code><nowiki><EnableHarmony>true</EnableHarmony></nowiki></code> to the property group.
  menu:
 
  ![](images/creating-a-smapi-mod-ide-primer/show-solution-pane-monodev.png)
 
2. From the Solution pad, right-click on the project to delete and choose _Add » New File_: 
 
  ![](images/creating-a-smapi-mod-ide-primer/create-file-monodev-1.png)
 
3. From the 'New File' window, choose the file type (usually _General » Empty Class_): 
 
  ![](images/creating-a-smapi-mod-ide-primer/create-file-monodev-2.png)
 
4. Enter a descriptive file name and click _New_: 
 
  ![](images/creating-a-smapi-mod-ide-primer/create-file-monodev-3.png)
 
  
## Delete a file
+
===In MonoDevelop/Visual Studio for Mac===
<section id="delete-file"></section>
+
<p style="color:red;">'''This section is out of date for Stardew Valley 1.5.5. It appears you cannot change the .NET framework in this way with Visual Studio 2019 and Stardew Valley 1.5.5.'''</p>
  
### In Visual Studio 2017
+
# Open the Solution pad. If it's not visible, click ''View » Pads » Solution'' from the menu:<br />[[File:Modding - IDE reference - show solution pane (MonoDevelop).png]]
 +
# From the Solution pad, right-click on the project and choose ''Options'':<br />[[File:Modding - IDE reference - change target framework (MonoDevelop 1).png]]
 +
# On the ''Build » General'' tab, change the ''Target Framework'' dropdown to ''Mono / .NET 4.5'':<br />[[File:Modding - IDE reference - change target framework (MonoDevelop 2).png]]
  
1. Open the Solution Explorer pane. If it's not visible, click _View » Solution Explorer_
+
==Add a file==
  from the menu: 
+
<span id="add-file"></span>
  ![](images/creating-a-smapi-mod-ide-primer/show-solution-pane-vs.png)
 
2. From the Solution Explorer pane, right-click on the file to delete and choose _Delete_: 
 
  ![](images/creating-a-smapi-mod-ide-primer/delete-file-vs.png)
 
  
### In MonoDevelop/Xamarin
+
===In Visual Studio 2017===
 +
# Open the Solution Explorer pane. If it's not visible, click ''View » Solution Explorer'' from the menu:<br />[[File:Modding - IDE reference - show solution pane (Visual Studio).png]]
 +
# From the Solution Explorer pane, right-click on the project and choose ''Add » New Item'':<br />[[File:Modding - IDE reference - create file (Visual Studio 1).png]]
 +
# From the 'Add New Item' window, choose the file type (usually ''Visual C# Item » Class''):<br />[[File:Modding - IDE reference - create file (Visual Studio 2).png]]
 +
# Enter a descriptive file name and click ''Add'':<br />[[File:Modding - IDE reference - create file (Visual Studio 3).png]]
  
1. Open the Solution pad. If it's not visible, click _View » Pads » Solution_ from the
+
===In MonoDevelop/Visual Studio for Mac===
  menu:
+
# Open the Solution pad. If it's not visible, click ''View » Pads » Solution'' from the menu:<br />[[File:Modding - IDE reference - show solution pane (MonoDevelop).png]]
  ![](images/creating-a-smapi-mod-ide-primer/show-solution-pane-monodev.png)
+
# From the Solution pad, right-click on the project to delete and choose ''Add » New File'':<br />[[File:Modding - IDE reference - create file (MonoDevelop 1).png]]
2. From the Solution pad, right-click on the file to delete and choose _Remove_:
+
# From the 'New File' window, choose the file type (usually ''General » Empty Class''):<br />[[File:Modding - IDE reference - create file (MonoDevelop 2).png]]
  ![](images/creating-a-smapi-mod-ide-primer/delete-file-monodev.png)
+
# Enter a descriptive file name and click ''New'':<br />[[File:Modding - IDE reference - create file (MonoDevelop 3).png]]
  
## Add a NuGet package
+
==Delete a file==
<section id="add-nuget"></section>
+
<span id="delete-file"></span>
  
### In Visual Studio 2017
+
===In Visual Studio 2017===
 +
# Open the Solution Explorer pane. If it's not visible, click ''View » Solution Explorer'' from the menu:<br />[[File:Modding - IDE reference - show solution pane (Visual Studio).png]]
 +
# From the Solution Explorer pane, right-click on the file to delete and choose ''Delete'':<br />[[File:Modding - IDE reference - delete file (Visual Studio).png]]
  
1. Click _Tools » NuGet Package Manager » Manage NuGet Packages for Solution_ from the menu:
+
===In MonoDevelop/Visual Studio for Mac===
  ![](images/creating-a-smapi-mod-ide-primer/add-nuget-package-vs-1.png)
+
# Open the Solution pad. If it's not visible, click ''View » Pads » Solution'' from the menu:<br />[[File:Modding - IDE reference - show solution pane (MonoDevelop).png]]
2. On the _Browse_ tab, search for the package and click on the result to display some options: 
+
# From the Solution pad, right-click on the file to delete and choose ''Remove'':<br />[[File:Modding - IDE reference - delete file (MonoDevelop).png]]
  ![](images/creating-a-smapi-mod-ide-primer/add-nuget-package-vs-2.png)
 
3. In the options, check the box next to your project and click _Install_: 
 
  ![](images/creating-a-smapi-mod-ide-primer/add-nuget-package-vs-3.png)
 
4. If a 'Review Changes' dialogue appears, click _OK_:
 
  ![](images/creating-a-smapi-mod-ide-primer/add-nuget-package-vs-4.png)
 
  
### In MonoDevelop/Xamarin
+
==Add a NuGet package==
 +
<span id="add-nuget"></span>
  
1. Click _Project » Add NuGet Packages_ from the menu:
+
===In Visual Studio 2019/2022===
  ![](images/creating-a-smapi-mod-ide-primer/add-nuget-package-monodev-1.png)
+
# Click ''Tools » NuGet Package Manager » Manage NuGet Packages for Solution'' from the menu:<br />[[File:Modding - IDE reference - add NuGet package (Visual Studio 1).png]]
2. Search for the package, click on the result, and click _Add Package_:
+
# Note: if the nuget package manager is missing, you can add it as a package source with the following steps: https://stackoverflow.com/questions/37293242/nuget-package-manager-no-packages-found-even-though-the-package-exists
  ![](images/creating-a-smapi-mod-ide-primer/add-nuget-package-monodev-2.png)
+
# On the ''Browse'' tab, search for the package and click on the result to display some options:<br />[[File:Modding - IDE reference - add NuGet package (Visual Studio 2).png]]
 +
# In the options, check the box next to your project and click ''Install'':<br />[[File:Modding - IDE reference - add NuGet package (Visual Studio 3).png]]
 +
# If a 'Review Changes' dialogue appears, click ''OK'':<br />[[File:Modding - IDE reference - add NuGet package (Visual Studio 4).png]]
  
## Edit project file (`.csproj`)
+
===In Visual Studio 2019 for Mac===
<section id="edit-project"></section>
+
# Click ''Project » Manage NuGet Packages...'' from the menu:<br />[[File:VS Mac 5 managenuget.png|600px]]
 +
# Search for the package, click on the result, and click ''Add Package'':<br />[[File:VS Mac 6 addnuget.png|600px]]
 +
# Quit and relaunch Visual Studio.
  
Sometimes you may want to edit the project file directly (mainly to configure build steps). The
+
===In MonoDevelop/Visual Studio for Mac===
project is a `.csproj` file, and can be edited from within the IDE.
+
# Click ''Project » Add NuGet Packages'' from the menu:<br />[[File:Modding - IDE reference - add NuGet package (MonoDevelop 1).png]]
 +
# Search for the package, click on the result, and click ''Add Package'':<br />[[File:Modding - IDE reference - add NuGet package (MonoDevelop 2).png]]
  
### In Visual Studio 2017
+
==Edit project file (<samp>.csproj</samp>)==
 +
<span id="edit-project"></span>
  
1. Open the Solution Explorer pane. If it's not visible, click _View » Solution Explorer_
+
Sometimes you may want to edit the project file directly (mainly to configure build steps). The project is a <samp>.csproj</samp> file, and can be edited from within the IDE.
  from the menu: 
 
  ![](images/creating-a-smapi-mod-ide-primer/show-solution-pane-vs.png)
 
2. From the Solution Explorer pane, right-click on the project and choose _Unload_: 
 
  ![](images/creating-a-smapi-mod-ide-primer/edit-project-file-vs-1.png)
 
3. Right-click on the project again and choose _Edit &lt;project name&gt;.csproj_: 
 
  ![](images/creating-a-smapi-mod-ide-primer/edit-project-file-vs-2.png)
 
4. Make your changes in the editor that appears and save.
 
5. When you're done, right-click on the project again and choose _Reload Project_: 
 
  ![](images/creating-a-smapi-mod-ide-primer/edit-project-file-vs-3.png)
 
  
### In MonoDevelop/Xamarin
+
===In Visual Studio 2017===
 +
# Open the Solution Explorer pane. If it's not visible, click ''View » Solution Explorer'' from the menu:<br />[[File:Modding - IDE reference - show solution pane (Visual Studio).png]]
 +
# From the Solution Explorer pane, right-click on the project and choose ''Unload'':<br />[[File:Modding - IDE reference - edit project (Visual Studio 1).png]]
 +
# Right-click on the project again and choose ''Edit &lt;project name&gt;.csproj'':<br />[[File:Modding - IDE reference - edit project (Visual Studio 2).png]]
 +
# Make your changes in the editor that appears and save.
 +
# When you're done, right-click on the project again and choose ''Reload Project'':<br />[[File:Modding - IDE reference - edit project (Visual Studio 3).png]]
  
1. Open the Solution pad. If it's not visible, click _View » Pads » Solution_ from the
+
===In MonoDevelop/Visual Studio for Mac===
  menu:
+
# Open the Solution pad. If it's not visible, click ''View » Pads » Solution'' from the menu:<br />[[File:Modding - IDE reference - show solution pane (MonoDevelop).png]]
  ![](images/creating-a-smapi-mod-ide-primer/show-solution-pane-monodev.png)
+
# From the Solution pad, right-click on the project and choose ''Tools » Edit File'':<br />[[File:Modding - IDE reference - edit project (MonoDevelop).png]]
2. From the Solution pad, right-click on the project and choose _Tools » Edit File_:
+
# Make your changes in the editor that appears and save.
  ![](images/creating-a-smapi-mod-ide-primer/edit-project-file-monodev.png)
 
3. Make your changes in the editor that appears and save.
 
  
## Find compiled files
+
==Find compiled files==
<section id="build-output"></section>
+
<span id="build-output"></span>
  
### In Visual Studio 2017
+
===In Visual Studio 2017===
 +
# Open the Solution Explorer pane. If it's not visible, click ''View » Solution Explorer'' from the menu:<br />[[File:Modding - IDE reference - show solution pane (Visual Studio).png]]
 +
# From the Solution Explorer pane, right-click on the project and choose ''Open Folder in File Explorer'':<br />[[File:Modding - IDE reference - view build output (Visual Studio).png]]
 +
# Navigate to <samp>bin\Debug</samp> (or <samp>bin\Release</samp> if you switched to release build configuration).
  
1. Open the Solution Explorer pane. If it's not visible, click _View » Solution Explorer_
+
===In MonoDevelop/Visual Studio for Mac===
  from the menu:
+
# Open the Solution pad. If it's not visible, click ''View » Pads » Solution'' from the menu:<br />[[File:Modding - IDE reference - show solution pane (MonoDevelop).png]]
  ![](images/creating-a-smapi-mod-ide-primer/show-solution-pane-vs.png)
+
# From the Solution pad, right-click on the project and choose ''Open Containing Folder'':<br />[[File:Modding - IDE reference - view build output (MonoDevelop).png]]
2. From the Solution Explorer pane, right-click on the project and choose _Open Folder in File Explorer_:
+
# Navigate to <samp>bin/Debug</samp> (or <samp>bin/Release</samp> if you switched to release build configuration).
  ![](images/creating-a-smapi-mod-ide-primer/view-build-output-vs.png)
 
3. Navigate to the `bin\Debug` (or `bin\Release` if you switched to release build configuration).
 
  
### In MonoDevelop/Xamarin
+
==Add a reference to another DLL==
 +
<span id="add-reference"></span>
  
1. Open the Solution pad. If it's not visible, click _View » Pads » Solution_ from the
+
===In Visual Studio 2017===
  menu:
+
# Open the Solution Explorer pane. If it's not visible, click ''View » Solution Explorer'' from the menu:<br />[[File:Modding - IDE reference - show solution pane (Visual Studio).png]]
  ![](images/creating-a-smapi-mod-ide-primer/show-solution-pane-monodev.png)
+
# From the Solution Explorer pane, right-click on ''References'' and choose ''Add Reference...'':<br />[[File:Modding - IDE reference - add reference (Visual Studio 1).png]]
2. From the Solution pad, right-click on the project and choose _Open Containing Folder_:
+
# From the 'Reference Manager' window, choose ''Browse'' in the left side, then click ''Browse..'' at the bottom:<br />[[File:Modding - IDE reference - add reference (Visual Studio 2).png]]
  ![](images/creating-a-smapi-mod-ide-primer/view-build-output-monodev.png)
+
# Find the DLL you want to reference, select it, and click ''Add'':<br />[[File:Modding - IDE reference - add reference (Visual Studio 3).png]]
3. Navigate to the `bin/Debug` (or `bin/Release` if you switched to release build configuration).
+
# From the 'Reference Manager' window, click ''OK'':<br />[[File:Modding - IDE reference - add reference (Visual Studio 4).png]]
</pre>
 
  
[[Category:Modding|IDE reference]]
+
===In Rider===
 +
When opening a project for the first time, you must add a reference to StardewModdingAPI.dll for code completion to work.
 +
# In the Explorer panel, select the ''Solution'' view
 +
# Under the project, right-click on ''Dependencies'' and choose ''Reference...''
 +
# In the Add Reference window, click ''Add From...'' at the bottom
 +
# Find the DLL you want to reference, select it, and click ''OK''
 +
 
 +
 
 +
[[Category:Modding]]
 +
 
 +
[[es:Modding:Referencia IDE]]
 +
[[ru:Модификации:Настройка среды разработки]]
 +
[[zh:模组:IDE 参考]]

Revision as of 04:13, 14 April 2024

Index

This page is a quick reference for how to use Visual Studio 2017 or MonoDevelop/Visual Studio for Mac when creating or editing a SMAPI mod. See Modding:Modder Guide for the main guide.

Before you start

  • You should install Visual Studio Community (Windows), MonoDevelop (Linux), or Visual Studio for Mac (Mac).
  • Reviewing C# Fundamentals for Absolute Beginners is strongly recommended if you're new to programming C#.
  • Here are some basic terms to remember:
    term definition
    IDE The program used to edit, run, and compile your code (short for Integrated Development Environment). The main IDEs are Visual Studio on Windows, and MonoDevelop/Visual Studio for Mac on Linux/Mac.
    DLL The file with a .dll extension which contains your compiled code (short for Dynamic Link Library). This is the file that SMAPI reads when loading your mod.
    project A collection of source code + configuration + resources (like images) you edit in the IDE. Each project is compiled into its own DLL.
    solution A collection of projects with some global settings. The solution itself isn't compiled, but it enables some convenient features (like letting projects easily reference each other).

Create a mod project

Before you can write your mod code, you need to create a solution and project to contain it.

Windows (Visual Studio 2019/2022)

  1. Open Visual Studio 2019/2022.
  2. Click Create a new project from the start screen.
    Modding - IDE reference - create project (Visual Studio 1).png
  3. Filter by "C#" and "Library", then choose Class Library and click Next. Make sure you don't choose Class Library (.NET Framework) which won't work.
    Modding - IDE reference - create project (Visual Studio 2).png
  4. In the configure your new project window:
    1. Enter a descriptive mod name. By convention, the name should be one word with mixed caps (like "PineapplesEverywhere").
    2. Make sure "Place solution and project in the same directory" is not checked.
    3. Click "Create" to to create the project.
    Modding - IDE reference - create project (Visual Studio 3).png
  5. Next, select NET 6.0 and click "Create" to create the project. For VS 2022, this will be on the next page.
    Screenshot 2021-12-16 140835.png

Linux (MonoDevelop)

  1. Open MonoDevelop.
  2. Click File » New Solution from the menu bar:
    Modding - IDE reference - create project (MonoDevelop 1).png
  3. In the 'New Project' window, choose .NET » Library and click Next:
    Modding - IDE reference - create project (MonoDevelop 2).png
  4. Enter a descriptive mod name. By convention, the name should be one word with mixed caps (like "PineapplesEverywhere"):
    Modding - IDE reference - create project (MonoDevelop 3).png
  5. Make sure "create a project directory within the solution directory" is checked, and click Create:
    Modding - IDE reference - create project (MonoDevelop 4).png

MacOS (Visual Studio 2019 for Mac)

  1. Install the .NET 5.0 SDK if you haven't already (link: [1]).
    1a NET website.png
  2. Open Visual Studio for Mac.
  3. Click File » New Solution from the menu bar:
    VS Mac 1 newsolution.png
  4. Select the correct type of class library:
    VS Mac 2 createlibrary.png
  5. Set it to target .NET 5.0.:
    VS Mac 3 setframework.png
  6. Enter a descriptive mod name for the project. By convention, the name should be one word with mixed caps (like "PineapplesEverywhere"):
    VS Mac 4 nameproject.png

MacOS (Visual Studio for Mac)

  1. Open Visual Studio for Mac.
  2. Click File » New Solution from the menu bar:
    Modding - IDE reference - create project (Visual Studio for Mac 1).png
  3. In the 'New Project' window, choose .NET » Library and click Next:
    Modding - IDE reference - create project (Visual Studio for Mac 2).png
  4. Enter a descriptive mod name. By convention, the name should be one word with mixed caps (like "PineapplesEverywhere"):
    Modding - IDE reference - create project (Visual Studio for Mac 3).png
  5. Make sure "create a project directory within the solution directory" is checked, and click Create:
    Modding - IDE reference - create project (Visual Studio for Mac 4).png

Set the target framework

The 'target framework' is the version of .NET your code uses, which affects the version needed to run your mod. The recommended target framework is .NET 5.0, which is the version SMAPI itself targets. Please find the subsection below for your OS (Windows/Mac). You cannot use .NET 6.0.

(yes, we know .NET 5.0 is past EOL.)

In Windows Visual Studio 2019/2022

NOTE: Visual Studio 2017 MAY no longer be compatible with creating mods! If you followed Modding:Modder_Guide/Get_Started and receive errors, from the code that page instructed be copy and pasted, with regards to helper. Events in the Entry(IModhelper helper) method and ButtonPressedEventArgs from the Entry(IModHelper helper) method, try the project-creation and code-copy/paste process again with Visual Studio 2019/2022 instead.


  1. Open the Solution Explorer pane. If it's not visible, click View » Solution Explorer from the menu:
    Modding - IDE reference - show solution pane (Visual Studio).png
  2. From the Solution Explorer, right-click on the project and choose Properties:
    Modding - IDE reference - change target framework (Visual Studio 1).png
  3. On the Application tab, change the Target Framework dropdown to .NET 5.0:
    Modding - IDE reference - change target framework (Visual Studio 2).png
  4. A dialogue may appear asking you to confirm the change. Click 'Yes' to confirm:
    Modding - IDE reference - change target framework (Visual Studio 3).png

In Visual Studio 2019 for Mac

If you followed the instructions above to set up your project, your framework should already be set to .NET 5.0. However, if you picked the wrong class library or you just want to check, you can follow these steps to look at the .csproj file, which is basically equivalent to setting it manually. (If you're checking that it worked, don't replace the .csproj, just check it refers to .NET 5.0.)

Unfortunately there doesn't appear to be a way to change the target framework using the GUI. However, it is very easy to follow the 1.5.5 migration guide steps:

  1. Open the .csproj file for editing:
    VS Mac 7 editcsproj.png
  2. Replace your mod's .csproj file with this (where EXAMLE_MOD_NAME is your solution's name):
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <AssemblyName>EXAMPLE_MOD_NAME</AssemblyName>
    <RootNamespace>EXAMPLE_MOD_NAME</RootNamespace>
    <Version>1.0.0</Version>
    <TargetFramework>net5.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Pathoschild.Stardew.ModBuildConfig" Version="4.0.0" />
  </ItemGroup>
</Project>
  1. If the mod uses Harmony, add <EnableHarmony>true</EnableHarmony> to the property group.

In MonoDevelop/Visual Studio for Mac

This section is out of date for Stardew Valley 1.5.5. It appears you cannot change the .NET framework in this way with Visual Studio 2019 and Stardew Valley 1.5.5.

  1. Open the Solution pad. If it's not visible, click View » Pads » Solution from the menu:
    Modding - IDE reference - show solution pane (MonoDevelop).png
  2. From the Solution pad, right-click on the project and choose Options:
    Modding - IDE reference - change target framework (MonoDevelop 1).png
  3. On the Build » General tab, change the Target Framework dropdown to Mono / .NET 4.5:
    Modding - IDE reference - change target framework (MonoDevelop 2).png

Add a file

In Visual Studio 2017

  1. Open the Solution Explorer pane. If it's not visible, click View » Solution Explorer from the menu:
    Modding - IDE reference - show solution pane (Visual Studio).png
  2. From the Solution Explorer pane, right-click on the project and choose Add » New Item:
    Modding - IDE reference - create file (Visual Studio 1).png
  3. From the 'Add New Item' window, choose the file type (usually Visual C# Item » Class):
    Modding - IDE reference - create file (Visual Studio 2).png
  4. Enter a descriptive file name and click Add:
    Modding - IDE reference - create file (Visual Studio 3).png

In MonoDevelop/Visual Studio for Mac

  1. Open the Solution pad. If it's not visible, click View » Pads » Solution from the menu:
    Modding - IDE reference - show solution pane (MonoDevelop).png
  2. From the Solution pad, right-click on the project to delete and choose Add » New File:
    Modding - IDE reference - create file (MonoDevelop 1).png
  3. From the 'New File' window, choose the file type (usually General » Empty Class):
    Modding - IDE reference - create file (MonoDevelop 2).png
  4. Enter a descriptive file name and click New:
    Modding - IDE reference - create file (MonoDevelop 3).png

Delete a file

In Visual Studio 2017

  1. Open the Solution Explorer pane. If it's not visible, click View » Solution Explorer from the menu:
    Modding - IDE reference - show solution pane (Visual Studio).png
  2. From the Solution Explorer pane, right-click on the file to delete and choose Delete:
    Modding - IDE reference - delete file (Visual Studio).png

In MonoDevelop/Visual Studio for Mac

  1. Open the Solution pad. If it's not visible, click View » Pads » Solution from the menu:
    Modding - IDE reference - show solution pane (MonoDevelop).png
  2. From the Solution pad, right-click on the file to delete and choose Remove:
    Modding - IDE reference - delete file (MonoDevelop).png

Add a NuGet package

In Visual Studio 2019/2022

  1. Click Tools » NuGet Package Manager » Manage NuGet Packages for Solution from the menu:
    Modding - IDE reference - add NuGet package (Visual Studio 1).png
  2. Note: if the nuget package manager is missing, you can add it as a package source with the following steps: https://stackoverflow.com/questions/37293242/nuget-package-manager-no-packages-found-even-though-the-package-exists
  3. On the Browse tab, search for the package and click on the result to display some options:
    Modding - IDE reference - add NuGet package (Visual Studio 2).png
  4. In the options, check the box next to your project and click Install:
    Modding - IDE reference - add NuGet package (Visual Studio 3).png
  5. If a 'Review Changes' dialogue appears, click OK:
    Modding - IDE reference - add NuGet package (Visual Studio 4).png

In Visual Studio 2019 for Mac

  1. Click Project » Manage NuGet Packages... from the menu:
    VS Mac 5 managenuget.png
  2. Search for the package, click on the result, and click Add Package:
    VS Mac 6 addnuget.png
  3. Quit and relaunch Visual Studio.

In MonoDevelop/Visual Studio for Mac

  1. Click Project » Add NuGet Packages from the menu:
    Modding - IDE reference - add NuGet package (MonoDevelop 1).png
  2. Search for the package, click on the result, and click Add Package:
    Modding - IDE reference - add NuGet package (MonoDevelop 2).png

Edit project file (.csproj)

Sometimes you may want to edit the project file directly (mainly to configure build steps). The project is a .csproj file, and can be edited from within the IDE.

In Visual Studio 2017

  1. Open the Solution Explorer pane. If it's not visible, click View » Solution Explorer from the menu:
    Modding - IDE reference - show solution pane (Visual Studio).png
  2. From the Solution Explorer pane, right-click on the project and choose Unload:
    Modding - IDE reference - edit project (Visual Studio 1).png
  3. Right-click on the project again and choose Edit <project name>.csproj:
    Modding - IDE reference - edit project (Visual Studio 2).png
  4. Make your changes in the editor that appears and save.
  5. When you're done, right-click on the project again and choose Reload Project:
    Modding - IDE reference - edit project (Visual Studio 3).png

In MonoDevelop/Visual Studio for Mac

  1. Open the Solution pad. If it's not visible, click View » Pads » Solution from the menu:
    Modding - IDE reference - show solution pane (MonoDevelop).png
  2. From the Solution pad, right-click on the project and choose Tools » Edit File:
    Modding - IDE reference - edit project (MonoDevelop).png
  3. Make your changes in the editor that appears and save.

Find compiled files

In Visual Studio 2017

  1. Open the Solution Explorer pane. If it's not visible, click View » Solution Explorer from the menu:
    Modding - IDE reference - show solution pane (Visual Studio).png
  2. From the Solution Explorer pane, right-click on the project and choose Open Folder in File Explorer:
    Modding - IDE reference - view build output (Visual Studio).png
  3. Navigate to bin\Debug (or bin\Release if you switched to release build configuration).

In MonoDevelop/Visual Studio for Mac

  1. Open the Solution pad. If it's not visible, click View » Pads » Solution from the menu:
    Modding - IDE reference - show solution pane (MonoDevelop).png
  2. From the Solution pad, right-click on the project and choose Open Containing Folder:
    Modding - IDE reference - view build output (MonoDevelop).png
  3. Navigate to bin/Debug (or bin/Release if you switched to release build configuration).

Add a reference to another DLL

In Visual Studio 2017

  1. Open the Solution Explorer pane. If it's not visible, click View » Solution Explorer from the menu:
    Modding - IDE reference - show solution pane (Visual Studio).png
  2. From the Solution Explorer pane, right-click on References and choose Add Reference...:
    Modding - IDE reference - add reference (Visual Studio 1).png
  3. From the 'Reference Manager' window, choose Browse in the left side, then click Browse.. at the bottom:
    Modding - IDE reference - add reference (Visual Studio 2).png
  4. Find the DLL you want to reference, select it, and click Add:
    Modding - IDE reference - add reference (Visual Studio 3).png
  5. From the 'Reference Manager' window, click OK:
    Modding - IDE reference - add reference (Visual Studio 4).png

In Rider

When opening a project for the first time, you must add a reference to StardewModdingAPI.dll for code completion to work.

  1. In the Explorer panel, select the Solution view
  2. Under the project, right-click on Dependencies and choose Reference...
  3. In the Add Reference window, click Add From... at the bottom
  4. Find the DLL you want to reference, select it, and click OK