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