diff options
| author | ruki <[email protected]> | 2026-03-17 22:43:03 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2026-03-17 22:43:03 +0800 |
| commit | 40ced1a19868a7ab57f6d1322c76b02e23a4aa97 (patch) | |
| tree | ba983e59c5b2630a9faf0ca3b0297fdb895c8df6 | |
| parent | ce2f02d4bccd0da6f8e7a12330ac2d56ab9b525f (diff) | |
improve get default target framework
| -rw-r--r-- | xmake/rules/csharp/modules/csproj_properties.lua | 39 | ||||
| -rw-r--r-- | xmake/toolchains/dotnet/xmake.lua | 3 |
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) |
