Skip to content

Commit

Permalink
Merge branch 'develop' into stable
Browse files Browse the repository at this point in the history
  • Loading branch information
Pathoschild committed Aug 26, 2021
2 parents 211f898 + 69b1c22 commit c95de4e
Show file tree
Hide file tree
Showing 8 changed files with 46 additions and 21 deletions.
2 changes: 1 addition & 1 deletion build/common.targets
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<!--set general build properties -->
<Version>3.12.3</Version>
<Version>3.12.4</Version>
<Product>SMAPI</Product>
<LangVersion>latest</LangVersion>
<AssemblySearchPaths>$(AssemblySearchPaths);{GAC}</AssemblySearchPaths>
Expand Down
6 changes: 6 additions & 0 deletions docs/release-notes.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
[README](README.md)

# Release notes
## 3.12.4
Released 25 August 2021 for Stardew Valley 1.5.4 or later.

* For players:
* Fixed error loading some mods in SMAPI 3.12.3.

## 3.12.3
Released 25 August 2021 for Stardew Valley 1.5.4 or later.

Expand Down
4 changes: 2 additions & 2 deletions src/SMAPI.Mods.ConsoleCommands/manifest.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"Name": "Console Commands",
"Author": "SMAPI",
"Version": "3.12.3",
"Version": "3.12.4",
"Description": "Adds SMAPI console commands that let you manipulate the game.",
"UniqueID": "SMAPI.ConsoleCommands",
"EntryDll": "ConsoleCommands.dll",
"MinimumApiVersion": "3.12.3"
"MinimumApiVersion": "3.12.4"
}
4 changes: 2 additions & 2 deletions src/SMAPI.Mods.ErrorHandler/manifest.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"Name": "Error Handler",
"Author": "SMAPI",
"Version": "3.12.3",
"Version": "3.12.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.12.3"
"MinimumApiVersion": "3.12.4"
}
4 changes: 2 additions & 2 deletions src/SMAPI.Mods.SaveBackup/manifest.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"Name": "Save Backup",
"Author": "SMAPI",
"Version": "3.12.3",
"Version": "3.12.4",
"Description": "Automatically backs up all your saves once per day into its folder.",
"UniqueID": "SMAPI.SaveBackup",
"EntryDll": "SaveBackup.dll",
"MinimumApiVersion": "3.12.3"
"MinimumApiVersion": "3.12.4"
}
4 changes: 2 additions & 2 deletions src/SMAPI/Constants.cs
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ internal static class EarlyConstants
internal static int? LogScreenId { get; set; }

/// <summary>SMAPI's current raw semantic version.</summary>
internal static string RawApiVersion = "3.12.3";
internal static string RawApiVersion = "3.12.4";
}

/// <summary>Contains SMAPI's constants and assumptions.</summary>
Expand Down Expand Up @@ -249,7 +249,7 @@ internal static void ConfigureAssemblyResolver(AssemblyDefinitionResolver resolv
// - 'StardewValley': assembly name on Linux/macOS;
// - 'Stardew Valley': assembly name on Windows;
// - 'Netcode': an assembly that's separate on Windows only.
resolver.Add(AssemblyDefinition.ReadAssembly(typeof(Game1).Assembly.Location), "StardewValley", "Stardew Valley"
resolver.AddWithExplicitNames(AssemblyDefinition.ReadAssembly(typeof(Game1).Assembly.Location), "StardewValley", "Stardew Valley"
#if !SMAPI_FOR_WINDOWS
, "Netcode"
#endif
Expand Down
16 changes: 11 additions & 5 deletions src/SMAPI/Framework/ModLoading/AssemblyDefinitionResolver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,13 @@ internal class AssemblyDefinitionResolver : DefaultAssemblyResolver
public void Add(params AssemblyDefinition[] assemblies)
{
foreach (AssemblyDefinition assembly in assemblies)
this.Add(assembly, assembly.Name.Name, assembly.Name.FullName);
this.AddWithExplicitNames(assembly, assembly.Name.Name, assembly.Name.FullName);
}

/// <summary>Add known assemblies to the resolver.</summary>
/// <summary>Add a known assembly to the resolver with the given names. This overrides the assembly names that would normally be assigned.</summary>
/// <param name="assembly">The assembly to add.</param>
/// <param name="names">The assembly names for which it should be returned.</param>
public void Add(AssemblyDefinition assembly, params string[] names)
public void AddWithExplicitNames(AssemblyDefinition assembly, params string[] names)
{
this.RegisterAssembly(assembly);
foreach (string name in names)
Expand All @@ -36,12 +36,18 @@ public void Add(AssemblyDefinition assembly, params string[] names)

/// <summary>Resolve an assembly reference.</summary>
/// <param name="name">The assembly name.</param>
public override AssemblyDefinition Resolve(AssemblyNameReference name) => this.ResolveName(name.Name) ?? base.Resolve(name);
public override AssemblyDefinition Resolve(AssemblyNameReference name)
{
return this.ResolveName(name.Name) ?? base.Resolve(name);
}

/// <summary>Resolve an assembly reference.</summary>
/// <param name="name">The assembly name.</param>
/// <param name="parameters">The assembly reader parameters.</param>
public override AssemblyDefinition Resolve(AssemblyNameReference name, ReaderParameters parameters) => this.ResolveName(name.Name) ?? base.Resolve(name, parameters);
public override AssemblyDefinition Resolve(AssemblyNameReference name, ReaderParameters parameters)
{
return this.ResolveName(name.Name) ?? base.Resolve(name, parameters);
}


/*********
Expand Down
27 changes: 20 additions & 7 deletions src/SMAPI/Framework/ModLoading/AssemblyLoader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -233,15 +233,28 @@ private IEnumerable<AssemblyParseResult> GetReferencedLocalAssemblies(FileInfo f
if (!file.Exists)
yield break; // not a local assembly

// read assembly and symbols
byte[] assemblyBytes = File.ReadAllBytes(file.FullName);
Stream readStream = this.TrackForDisposal(new MemoryStream(assemblyBytes));
// read assembly
AssemblyDefinition assembly;
{
FileInfo symbolsFile = new FileInfo(Path.Combine(Path.GetDirectoryName(file.FullName)!, Path.GetFileNameWithoutExtension(file.FullName)) + ".pdb");
if (symbolsFile.Exists)
this.SymbolReaderProvider.TryAddSymbolData(file.Name, () => this.TrackForDisposal(symbolsFile.OpenRead()));
byte[] assemblyBytes = File.ReadAllBytes(file.FullName);
Stream readStream = this.TrackForDisposal(new MemoryStream(assemblyBytes));

try
{
// read assembly with symbols
FileInfo symbolsFile = new FileInfo(Path.Combine(Path.GetDirectoryName(file.FullName)!, Path.GetFileNameWithoutExtension(file.FullName)) + ".pdb");
if (symbolsFile.Exists)
this.SymbolReaderProvider.TryAddSymbolData(file.Name, () => this.TrackForDisposal(symbolsFile.OpenRead()));
assembly = this.TrackForDisposal(AssemblyDefinition.ReadAssembly(readStream, new ReaderParameters(ReadingMode.Immediate) { AssemblyResolver = assemblyResolver, InMemory = true, ReadSymbols = true, SymbolReaderProvider = this.SymbolReaderProvider }));
}
catch (SymbolsNotMatchingException ex)
{
// read assembly without symbols
this.Monitor.Log($" Failed loading PDB for '{file.Name}'. Technical details:\n{ex}");
readStream.Position = 0;
assembly = this.TrackForDisposal(AssemblyDefinition.ReadAssembly(readStream, new ReaderParameters(ReadingMode.Immediate) { AssemblyResolver = assemblyResolver, InMemory = true }));
}
}
AssemblyDefinition assembly = this.TrackForDisposal(AssemblyDefinition.ReadAssembly(readStream, new ReaderParameters(ReadingMode.Immediate) { AssemblyResolver = assemblyResolver, InMemory = true, ReadSymbols = true, SymbolReaderProvider = this.SymbolReaderProvider }));

// skip if already visited
if (visitedAssemblyNames.Contains(assembly.Name.Name))
Expand Down

0 comments on commit c95de4e

Please sign in to comment.