diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 73c3a7bb..ab9f2732 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -20,4 +20,7 @@ + + + diff --git a/src/PepperDash.Essentials.Core/Web/RequestHandlers/GetPackageManifestRequestHandler.cs b/src/PepperDash.Essentials.Core/Web/RequestHandlers/GetPackageManifestRequestHandler.cs index 9be5e78f..aa1663a4 100644 --- a/src/PepperDash.Essentials.Core/Web/RequestHandlers/GetPackageManifestRequestHandler.cs +++ b/src/PepperDash.Essentials.Core/Web/RequestHandlers/GetPackageManifestRequestHandler.cs @@ -93,7 +93,15 @@ namespace PepperDash.Essentials.Core.Web.RequestHandlers essentials.Name = name; } - if (string.IsNullOrEmpty(essentials.PackageId)) + // Prefer the PackageId embedded via Directory.Build.props' AssemblyMetadata item (the + // authoritative source, matching the actual published PackageId) over any config-supplied + // or hardcoded value. + var reflectedPackageId = GetAssemblyMetadataValue(essentialsAssembly, "PackageId"); + if (!string.IsNullOrEmpty(reflectedPackageId)) + { + essentials.PackageId = reflectedPackageId; + } + else if (string.IsNullOrEmpty(essentials.PackageId)) { essentials.PackageId = "PepperDash.Essentials"; } @@ -123,6 +131,11 @@ namespace PepperDash.Essentials.Core.Web.RequestHandlers var reflectedRepoUrl = TrimTrailingGit(GetAssemblyMetadataValue(loaded.Assembly, "RepositoryUrl")); var reflectedName = GetAssemblyProduct(loaded.Assembly); + // Plugins built from a Directory.Build.props that embeds + // carry their PackageId + // directly - this is authoritative and should be preferred over the title/name fallback chain. + var reflectedPackageId = GetAssemblyMetadataValue(loaded.Assembly, "PackageId"); + var assemblyTitle = GetAssemblyTitle(loaded.Assembly); var assemblyName = loaded.Assembly.GetName().Name; var assemblyNameNoSeriesSuffix = StripTrailingSeriesSuffix(assemblyName); @@ -130,7 +143,8 @@ namespace PepperDash.Essentials.Core.Web.RequestHandlers var match = configPackages.FirstOrDefault(p => !matchedConfigPackages.Contains(p) && !string.IsNullOrEmpty(p.PackageId) && - (string.Equals(p.PackageId, assemblyTitle, StringComparison.OrdinalIgnoreCase) || + (string.Equals(p.PackageId, reflectedPackageId, StringComparison.OrdinalIgnoreCase) || + string.Equals(p.PackageId, assemblyTitle, StringComparison.OrdinalIgnoreCase) || string.Equals(p.PackageId, assemblyName, StringComparison.OrdinalIgnoreCase) || string.Equals(p.PackageId, assemblyNameNoSeriesSuffix, StringComparison.OrdinalIgnoreCase))); @@ -140,20 +154,22 @@ namespace PepperDash.Essentials.Core.Web.RequestHandlers mergedPackages.Add(new NugetVersion { - PackageId = match.PackageId, - Version = reflectedVersion, + Name = !string.IsNullOrEmpty(match.Name) ? match.Name : reflectedName, RepoUrl = !string.IsNullOrEmpty(match.RepoUrl) ? match.RepoUrl : reflectedRepoUrl, - Name = !string.IsNullOrEmpty(match.Name) ? match.Name : reflectedName + PackageId = !string.IsNullOrEmpty(reflectedPackageId) ? reflectedPackageId : match.PackageId, + Version = reflectedVersion }); } else { - // Loaded but not present (or not matched) in config - emit without a packageId + // Loaded but not present (or not matched) in config - emit the reflected PackageId + // when the assembly carries one, otherwise leave it null as before. mergedPackages.Add(new NugetVersion { - Version = reflectedVersion, + Name = reflectedName, RepoUrl = reflectedRepoUrl, - Name = reflectedName + PackageId = reflectedPackageId, + Version = reflectedVersion, }); } }