From 5b45e3e4170e50662bf335b498cfbd61a0bab75c Mon Sep 17 00:00:00 2001 From: sbwalker Date: Wed, 20 Aug 2025 07:09:33 -0400 Subject: [PATCH] support for staticwebassets folder in Nuget packages --- .../Infrastructure/InstallationManager.cs | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/Oqtane.Server/Infrastructure/InstallationManager.cs b/Oqtane.Server/Infrastructure/InstallationManager.cs index ca09616c..883997e6 100644 --- a/Oqtane.Server/Infrastructure/InstallationManager.cs +++ b/Oqtane.Server/Infrastructure/InstallationManager.cs @@ -71,22 +71,30 @@ namespace Oqtane.Infrastructure { try { - // iterate through files + // open nupkg as zip archive using (ZipArchive archive = ZipFile.OpenRead(packagename)) { + string id = ""; string frameworkversion = ""; + // locate nuspec foreach (ZipArchiveEntry entry in archive.Entries) { if (entry.FullName.ToLower().EndsWith(".nuspec")) { // open nuspec - XmlTextReader reader = new XmlTextReader(entry.Open()); + var reader = new XmlTextReader(entry.Open()); reader.Namespaces = false; // remove namespace - XmlDocument doc = new XmlDocument(); + var doc = new XmlDocument(); doc.Load(reader); + // get id + var node = doc.SelectSingleNode("/package/metadata/id"); + if (node != null) + { + id = node.InnerText; + } // get framework dependency - XmlNode node = doc.SelectSingleNode("/package/metadata/dependencies/dependency[@id='Oqtane.Framework']"); + node = doc.SelectSingleNode("/package/metadata/dependencies/dependency[@id='Oqtane.Framework']"); if (node != null) { frameworkversion = node.Attributes["version"].Value; @@ -109,7 +117,7 @@ namespace Oqtane.Infrastructure string filename = ""; // evaluate entry root folder - switch (entry.FullName.Split('/')[0]) + switch (entry.FullName.Split('/')[0].ToLower()) { case "lib": // lib/net*/... filename = ExtractFile(entry, binPath, 2); @@ -117,6 +125,9 @@ namespace Oqtane.Infrastructure case "wwwroot": // wwwroot/... filename = ExtractFile(entry, webRootPath, 1); break; + case "staticwebassets": // staticwebassets/... + filename = ExtractFile(entry, Path.Combine(webRootPath, Path.Combine("_content", id)), 1); + break; case "runtimes": // runtimes/name/... filename = ExtractFile(entry, binPath, 0); break;