From 1f02e88cce9a9fba47646a2a5cf4eea96c25dde3 Mon Sep 17 00:00:00 2001 From: ruki Date: Tue, 26 May 2026 00:41:06 +0800 Subject: improve nuget version --- xmake/modules/package/manager/nuget/find_package.lua | 19 ++++++++++++++++--- .../modules/package/manager/nuget/install_package.lua | 11 ++++++++++- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/xmake/modules/package/manager/nuget/find_package.lua b/xmake/modules/package/manager/nuget/find_package.lua index c9fa2b712..36d8561c1 100644 --- a/xmake/modules/package/manager/nuget/find_package.lua +++ b/xmake/modules/package/manager/nuget/find_package.lua @@ -28,6 +28,19 @@ import("core.project.config") import("core.project.target") import("private.utils.toolchain", {alias = "toolchain_utils"}) +-- convert nuget 4-segment version to semver build metadata +-- e.g. 1.0.3967.48 -> 1.0.3967+48 +-- @see https://github.com/xmake-io/xmake/issues/7556 +function _to_semver_version(version) + if version then + local major, minor, patch, build = version:match("^(%d+)%.(%d+)%.(%d+)%.(%d+)$") + if major then + return major .. "." .. minor .. "." .. patch .. "+" .. build + end + end + return version +end + function _find_target_root(targets, name) local namelower = name:lower() for targetname in pairs(targets or {}) do @@ -72,7 +85,7 @@ function _find_version_in_project_dependencies(manifest, name) local deplower = depname:lower() local normalized_depname = deplower:gsub("[._%-]", "") if deplower == namelower or normalized_depname == normalized_name then - return tostring(depver) + return _to_semver_version(tostring(depver)) end end end @@ -98,9 +111,9 @@ function _get_packagesdir_from_manifest(manifest) end end -local function _extract_version_from_root(rootname) +function _extract_version_from_root(rootname) if rootname then - return rootname:match("/(.+)$") + return _to_semver_version(rootname:match("/(.+)$")) end end diff --git a/xmake/modules/package/manager/nuget/install_package.lua b/xmake/modules/package/manager/nuget/install_package.lua index c00bad3c2..263c78b72 100644 --- a/xmake/modules/package/manager/nuget/install_package.lua +++ b/xmake/modules/package/manager/nuget/install_package.lua @@ -23,6 +23,15 @@ import("core.base.option") import("core.base.semver") import("lib.detect.find_tool") +-- convert semver build metadata to nuget 4-segment version +-- e.g. 1.0.3967+48 -> 1.0.3967.48 +-- @see https://github.com/xmake-io/xmake/issues/7556 +function _to_nuget_version(version) + if version then + return (version:gsub("%+", ".")) + end +end + -- dotnet add package libpapki --version 1.0.147 function _install(dotnet, name, opt) @@ -34,7 +43,7 @@ function _install(dotnet, name, opt) end if require_version then table.insert(argv, "--version") - table.insert(argv, require_version) + table.insert(argv, _to_nuget_version(require_version)) end local installdir = assert(opt.installdir, "installdir not found!") -- cgit v1.3.1