summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2026-03-17 22:43:03 +0800
committerruki <[email protected]>2026-03-17 22:43:03 +0800
commit40ced1a19868a7ab57f6d1322c76b02e23a4aa97 (patch)
treeba983e59c5b2630a9faf0ca3b0297fdb895c8df6
parentce2f02d4bccd0da6f8e7a12330ac2d56ab9b525f (diff)
improve get default target framework
-rw-r--r--xmake/rules/csharp/modules/csproj_properties.lua39
-rw-r--r--xmake/toolchains/dotnet/xmake.lua3
2 files changed, 11 insertions, 31 deletions
diff --git a/xmake/rules/csharp/modules/csproj_properties.lua b/xmake/rules/csharp/modules/csproj_properties.lua
index 324e67531..75d80e5a8 100644
--- a/xmake/rules/csharp/modules/csproj_properties.lua
+++ b/xmake/rules/csharp/modules/csproj_properties.lua
@@ -36,40 +36,17 @@ function _get_target_value(target, name)
return _first(target:values(name))
end
--- detect default target framework from dotnet sdk version, e.g. "net8.0"
+-- get default target framework from dotnet toolchain sdk version, e.g. "net8.0"
function _get_default_target_framework(context)
- local dotnet = _first(context.target:get("toolset.cs")) or "dotnet"
- dotnet = tostring(dotnet)
- _g.default_target_frameworks = _g.default_target_frameworks or {}
- local cached = _g.default_target_frameworks[dotnet]
- if cached ~= nil then
- return cached
- end
-
- local major = nil
- local sdks = try { function ()
- return os.iorunv(dotnet, {"--list-sdks"})
- end }
- if sdks then
- for line in sdks:gmatch("[^\r\n]+") do
- local line_major = tonumber(line:match("^%s*(%d+)%.%d+%.%d+"))
- if line_major and (not major or line_major > major) then
- major = line_major
- end
+ local major
+ local toolchain = context.target:toolchain("dotnet")
+ if toolchain then
+ local sdkver = toolchain:config("sdkver")
+ if sdkver then
+ major = tonumber(tostring(sdkver):match("^(%d+)"))
end
end
- if not major then
- local version = try { function ()
- return os.iorunv(dotnet, {"--version"})
- end }
- if version then
- major = tonumber(version:match("^%s*(%d+)"))
- end
- end
-
- local target_framework = major and ("net" .. tostring(major) .. ".0") or "net8.0"
- _g.default_target_frameworks[dotnet] = target_framework
- return target_framework
+ return "net" .. tostring(major or 8) .. ".0"
end
-- resolve target framework from user config or auto-detect from dotnet sdk
diff --git a/xmake/toolchains/dotnet/xmake.lua b/xmake/toolchains/dotnet/xmake.lua
index 64fad0ec0..e26136a0a 100644
--- a/xmake/toolchains/dotnet/xmake.lua
+++ b/xmake/toolchains/dotnet/xmake.lua
@@ -50,6 +50,9 @@ toolchain("dotnet")
end
toolchain:config_set("bindir", sdkinfo.bindir)
toolchain:config_set("sdkdir", sdkinfo.sdkdir)
+ if sdkinfo.sdkver then
+ toolchain:config_set("sdkver", sdkinfo.sdkver)
+ end
return true
end)