diff --git a/WelsonJS.Toolkit/Catswords.Phantomizer/AssemblyLoader.cs b/WelsonJS.Toolkit/Catswords.Phantomizer/AssemblyLoader.cs
index a22d509..b5aa2a6 100644
--- a/WelsonJS.Toolkit/Catswords.Phantomizer/AssemblyLoader.cs
+++ b/WelsonJS.Toolkit/Catswords.Phantomizer/AssemblyLoader.cs
@@ -551,7 +551,6 @@ namespace Catswords.Phantomizer
}
}
-
private static void EnsureSignedFileOrThrow(string path, string logicalName)
{
if (!File.Exists(path))
@@ -602,6 +601,21 @@ namespace Catswords.Phantomizer
}
Trace.TraceError("AssemblyIntegrity: hash mismatch! SHA256={0}", sha256);
+
+ // Delete corrupted file so the next run can re-download a clean copy.
+ if (File.Exists(path))
+ {
+ try
+ {
+ File.Delete(path);
+ Trace.TraceInformation("AssemblyIntegrity: deleted corrupted file {0}", path);
+ }
+ catch (Exception ex)
+ {
+ Trace.TraceWarning("AssemblyIntegrity: failed to delete corrupted file {0}: {1}", path, ex.Message);
+ }
+ }
+
throw new InvalidOperationException("AssemblyIntegrity check failed for: " + path);
}
diff --git a/WelsonJS.Toolkit/Catswords.Phantomizer/Catswords.Phantomizer.csproj b/WelsonJS.Toolkit/Catswords.Phantomizer/Catswords.Phantomizer.csproj
index 7f5a53b..54aa271 100644
--- a/WelsonJS.Toolkit/Catswords.Phantomizer/Catswords.Phantomizer.csproj
+++ b/WelsonJS.Toolkit/Catswords.Phantomizer/Catswords.Phantomizer.csproj
@@ -10,6 +10,7 @@
loader
Catswords.Phantomizer is an HTTP-based dynamic-link library (DLL) loader designed for .NET applications. It allows your application to fetch and load assemblies directly from your CDN (Azure Blob, S3, Cloudflare R2, etc.) at runtime, with optional GZip compression support.
Namhyeon Go, 2025 Catswords OSS and WelsonJS Contributors
+ 1.0.0.1
diff --git a/WelsonJS.Toolkit/Catswords.Phantomizer/README.md b/WelsonJS.Toolkit/Catswords.Phantomizer/README.md
index bed858d..94967d8 100644
--- a/WelsonJS.Toolkit/Catswords.Phantomizer/README.md
+++ b/WelsonJS.Toolkit/Catswords.Phantomizer/README.md
@@ -101,7 +101,7 @@ using Catswords.Phantomizer;
static void Main(string[] args)
{
AssemblyLoader.BaseUrl = GetAppConfig("AssemblyBaseUrl"); // Configure CDN base URL
- //AssemblyLoader.IntegrityUrl // (Optional) Set the integrity URL
+ //AssemblyLoader.IntegrityUrl = GetAppConfig("AssemblyIntegrityUrl"); // (Optional) Set the integrity URL
AssemblyLoader.LoaderNamespace = typeof(Program).Namespace;
AssemblyLoader.AppName = "WelsonJS";
AssemblyLoader.Register();
@@ -178,7 +178,7 @@ Once uploaded and pinned, the file cannot be silently modified without changing
## 📥 Download the pre-compiled file
-* [Download Catswords.Phantomizer.dll.gz (catswords.blob.core.windows.net)](https://catswords.blob.core.windows.net/welsonjs/packages/managed/Catswords.Phantomizer/1.0.0.0/Catswords.Phantomizer.dll.gz)
+* [Download Catswords.Phantomizer.dll.gz (catswords.blob.core.windows.net)](https://catswords.blob.core.windows.net/welsonjs/packages/managed/Catswords.Phantomizer/1.0.0.1/Catswords.Phantomizer.dll.gz)
---
diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/Program.cs b/WelsonJS.Toolkit/WelsonJS.Launcher/Program.cs
index 5302310..bbea457 100644
--- a/WelsonJS.Toolkit/WelsonJS.Launcher/Program.cs
+++ b/WelsonJS.Toolkit/WelsonJS.Launcher/Program.cs
@@ -132,7 +132,7 @@ namespace WelsonJS.Launcher
loaderType.GetProperty("BaseUrl")?.SetValue(null, GetAppConfig("AssemblyBaseUrl"));
loaderType.GetProperty("LoaderNamespace")?.SetValue(null, typeof(Program).Namespace);
loaderType.GetProperty("AppName")?.SetValue(null, "WelsonJS");
- //loaderType.GetProperty("IntegrityUrl")?.SetValue(null, GetAppConfig("AssemblyIntegrityUrl")); // In the future, we may use this to verify integrity.
+ loaderType.GetProperty("IntegrityUrl")?.SetValue(null, GetAppConfig("AssemblyIntegrityUrl"));
loaderType.GetMethod("Register")?.Invoke(null, null);
var loadNativeModulesMethod = loaderType.GetMethod(
@@ -154,6 +154,21 @@ namespace WelsonJS.Launcher
new Version(1, 13, 0, 0),
new[] { "ChakraCore.dll" }
});
+
+ /*
+ // Alternative way using direct type reference
+ AssemblyLoader.BaseUrl = GetAppConfig("AssemblyBaseUrl"); // Configure CDN base URL
+ AssemblyLoader.IntegrityUrl = GetAppConfig("AssemblyIntegrityUrl"); // (Optional) Set the integrity URL
+ AssemblyLoader.LoaderNamespace = typeof(Program).Namespace;
+ AssemblyLoader.AppName = "WelsonJS";
+ AssemblyLoader.Register();
+
+ AssemblyLoader.LoadNativeModules(
+ "ChakraCore",
+ new Version(1, 13, 0, 0),
+ new[] { "ChakraCore.dll" }
+ );
+ */
}
diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/Resources/Catswords.Phantomizer.dll.gz b/WelsonJS.Toolkit/WelsonJS.Launcher/Resources/Catswords.Phantomizer.dll.gz
index 57569a7..b60a106 100644
Binary files a/WelsonJS.Toolkit/WelsonJS.Launcher/Resources/Catswords.Phantomizer.dll.gz and b/WelsonJS.Toolkit/WelsonJS.Launcher/Resources/Catswords.Phantomizer.dll.gz differ