diff options
| author | ruki <[email protected]> | 2026-05-26 00:41:06 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2026-05-26 00:41:06 +0800 |
| commit | 1f02e88cce9a9fba47646a2a5cf4eea96c25dde3 (patch) | |
| tree | a1e78396ba1af500b4fc91525744b7322a455eee | |
| parent | de6bbeb47e1fe7b4c658807fdefd33739717609d (diff) | |
improve nuget version
| -rw-r--r-- | xmake/modules/package/manager/nuget/find_package.lua | 19 | ||||
| -rw-r--r-- | xmake/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!") |
