summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2026-05-26 00:41:06 +0800
committerruki <[email protected]>2026-05-26 00:41:06 +0800
commit1f02e88cce9a9fba47646a2a5cf4eea96c25dde3 (patch)
treea1e78396ba1af500b4fc91525744b7322a455eee
parentde6bbeb47e1fe7b4c658807fdefd33739717609d (diff)
improve nuget version
-rw-r--r--xmake/modules/package/manager/nuget/find_package.lua19
-rw-r--r--xmake/modules/package/manager/nuget/install_package.lua11
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!")