summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2022-01-16 23:43:01 -0500
committerJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2022-01-16 23:43:01 -0500
commit451b70953ff4c0b1b27ae0de203ad99379b45b2a (patch)
treec9e3cccb464517e670c059d3cd20dd3357ce24fe
parent1b9ff9cd101621cacc246fc2b7d936f964ae4b3f (diff)
parentdbed0289d7b7759145dea3e1c5d93df3d68ff116 (diff)
downloadSMAPI-451b70953ff4c0b1b27ae0de203ad99379b45b2a.tar.gz
SMAPI-451b70953ff4c0b1b27ae0de203ad99379b45b2a.tar.bz2
SMAPI-451b70953ff4c0b1b27ae0de203ad99379b45b2a.zip
Merge branch 'develop' into stable
-rw-r--r--build/common.targets2
-rw-r--r--docs/release-notes.md8
-rw-r--r--src/SMAPI.Mods.ConsoleCommands/manifest.json4
-rw-r--r--src/SMAPI.Mods.ErrorHandler/manifest.json4
-rw-r--r--src/SMAPI.Mods.SaveBackup/manifest.json4
-rw-r--r--src/SMAPI/Constants.cs2
-rw-r--r--src/SMAPI/Program.cs38
7 files changed, 46 insertions, 16 deletions
diff --git a/build/common.targets b/build/common.targets
index 8eac9757..86624b62 100644
--- a/build/common.targets
+++ b/build/common.targets
@@ -1,7 +1,7 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<!--set general build properties -->
- <Version>3.13.3</Version>
+ <Version>3.13.4</Version>
<Product>SMAPI</Product>
<LangVersion>latest</LangVersion>
<AssemblySearchPaths>$(AssemblySearchPaths);{GAC}</AssemblySearchPaths>
diff --git a/docs/release-notes.md b/docs/release-notes.md
index 957d5199..05ab58a3 100644
--- a/docs/release-notes.md
+++ b/docs/release-notes.md
@@ -1,8 +1,14 @@
← [README](README.md)
# Release notes
+## 3.13.4
+Released 16 January 2022 for Stardew Valley 1.5.6 or later.
+
+* For players:
+ * Fixed Linux/macOS launch error in 3.13.3.
+
## 3.13.3
-Released 16 January 2021 for Stardew Valley 1.5.6 or later.
+Released 16 January 2022 for Stardew Valley 1.5.6 or later.
* For players:
* **SMAPI now needs Stardew Valley 1.5.6 or later.**
diff --git a/src/SMAPI.Mods.ConsoleCommands/manifest.json b/src/SMAPI.Mods.ConsoleCommands/manifest.json
index 97e1c243..fa5f6d6f 100644
--- a/src/SMAPI.Mods.ConsoleCommands/manifest.json
+++ b/src/SMAPI.Mods.ConsoleCommands/manifest.json
@@ -1,9 +1,9 @@
{
"Name": "Console Commands",
"Author": "SMAPI",
- "Version": "3.13.3",
+ "Version": "3.13.4",
"Description": "Adds SMAPI console commands that let you manipulate the game.",
"UniqueID": "SMAPI.ConsoleCommands",
"EntryDll": "ConsoleCommands.dll",
- "MinimumApiVersion": "3.13.3"
+ "MinimumApiVersion": "3.13.4"
}
diff --git a/src/SMAPI.Mods.ErrorHandler/manifest.json b/src/SMAPI.Mods.ErrorHandler/manifest.json
index c4246721..11bc0b42 100644
--- a/src/SMAPI.Mods.ErrorHandler/manifest.json
+++ b/src/SMAPI.Mods.ErrorHandler/manifest.json
@@ -1,9 +1,9 @@
{
"Name": "Error Handler",
"Author": "SMAPI",
- "Version": "3.13.3",
+ "Version": "3.13.4",
"Description": "Handles some common vanilla errors to log more useful info or avoid breaking the game.",
"UniqueID": "SMAPI.ErrorHandler",
"EntryDll": "ErrorHandler.dll",
- "MinimumApiVersion": "3.13.3"
+ "MinimumApiVersion": "3.13.4"
}
diff --git a/src/SMAPI.Mods.SaveBackup/manifest.json b/src/SMAPI.Mods.SaveBackup/manifest.json
index b1b946c8..c50cff14 100644
--- a/src/SMAPI.Mods.SaveBackup/manifest.json
+++ b/src/SMAPI.Mods.SaveBackup/manifest.json
@@ -1,9 +1,9 @@
{
"Name": "Save Backup",
"Author": "SMAPI",
- "Version": "3.13.3",
+ "Version": "3.13.4",
"Description": "Automatically backs up all your saves once per day into its folder.",
"UniqueID": "SMAPI.SaveBackup",
"EntryDll": "SaveBackup.dll",
- "MinimumApiVersion": "3.13.3"
+ "MinimumApiVersion": "3.13.4"
}
diff --git a/src/SMAPI/Constants.cs b/src/SMAPI/Constants.cs
index 455cfd7e..667491d6 100644
--- a/src/SMAPI/Constants.cs
+++ b/src/SMAPI/Constants.cs
@@ -49,7 +49,7 @@ namespace StardewModdingAPI
internal static int? LogScreenId { get; set; }
/// <summary>SMAPI's current raw semantic version.</summary>
- internal static string RawApiVersion = "3.13.3";
+ internal static string RawApiVersion = "3.13.4";
}
/// <summary>Contains SMAPI's constants and assumptions.</summary>
diff --git a/src/SMAPI/Program.cs b/src/SMAPI/Program.cs
index 67ff8322..0c90f2aa 100644
--- a/src/SMAPI/Program.cs
+++ b/src/SMAPI/Program.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
@@ -16,7 +17,10 @@ namespace StardewModdingAPI
** Fields
*********/
/// <summary>The absolute path to search for SMAPI's internal DLLs.</summary>
- internal static readonly string DllSearchPath = EarlyConstants.InternalFilesPath;
+ private static readonly string DllSearchPath = EarlyConstants.InternalFilesPath;
+
+ /// <summary>The assembly paths in the search folders indexed by assembly name.</summary>
+ private static Dictionary<string, string> AssemblyPathsByName;
/*********
@@ -57,16 +61,36 @@ namespace StardewModdingAPI
/// <param name="e">The event arguments.</param>
private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs e)
{
- try
+ // cache assembly paths by name
+ if (Program.AssemblyPathsByName == null)
{
- AssemblyName name = new AssemblyName(e.Name);
- foreach (FileInfo dll in new DirectoryInfo(Program.DllSearchPath).EnumerateFiles("*.dll"))
+ Program.AssemblyPathsByName = new(StringComparer.OrdinalIgnoreCase);
+
+ foreach (string searchPath in new[] { EarlyConstants.ExecutionPath, Program.DllSearchPath })
{
- if (name.Name.Equals(AssemblyName.GetAssemblyName(dll.FullName).Name, StringComparison.OrdinalIgnoreCase))
- return Assembly.LoadFrom(dll.FullName);
+ foreach (string dllPath in Directory.EnumerateFiles(searchPath, "*.dll"))
+ {
+ try
+ {
+ string curName = AssemblyName.GetAssemblyName(dllPath).Name;
+ if (curName != null)
+ Program.AssemblyPathsByName[curName] = dllPath;
+ }
+ catch
+ {
+ continue;
+ }
+ }
}
+ }
- return null;
+ // resolve
+ try
+ {
+ string searchName = new AssemblyName(e.Name).Name;
+ return searchName != null && Program.AssemblyPathsByName.TryGetValue(searchName, out string assemblyPath)
+ ? Assembly.LoadFrom(assemblyPath)
+ : null;
}
catch (Exception ex)
{