diff --git a/modules/vstudio/tests/vc2010/test_globals.lua b/modules/vstudio/tests/vc2010/test_globals.lua
index 88c49a40..48931030 100644
--- a/modules/vstudio/tests/vc2010/test_globals.lua
+++ b/modules/vstudio/tests/vc2010/test_globals.lua
@@ -253,3 +253,45 @@
]]
end
+
+--
+-- Check that the "latest" systemversion works.
+-- note: we override the os.getWindowsRegistry method for reliable tests.
+--
+
+ function suite.windowsTargetPlatformVersionLatest_on2017()
+ p.action.set("vs2017")
+ systemversion "latest"
+ local oldRegistry = os["getWindowsRegistry"]
+ os["getWindowsRegistry"] = function (key) return "10.0.11111" end
+ prepare()
+ os["getWindowsRegistry"] = oldRegistry
+ test.capture [[
+
+ {42B5DBC6-AE1F-903D-F75D-41E363076E92}
+ true
+ Win32Proj
+ MyProject
+ 10.0.11111.0
+
+ ]]
+ end
+
+--
+-- Check that the "latest" systemversion will not add
+-- when the action is less than 2017
+--
+
+ function suite.windowsTargetPlatformVersionLatest_on2015()
+ p.action.set("vs2015")
+ systemversion "latest"
+ prepare()
+ test.capture [[
+
+ {42B5DBC6-AE1F-903D-F75D-41E363076E92}
+ true
+ Win32Proj
+ MyProject
+
+ ]]
+ end
diff --git a/modules/vstudio/vs2010_vcxproj.lua b/modules/vstudio/vs2010_vcxproj.lua
index 3f2fe692..e4e83685 100644
--- a/modules/vstudio/vs2010_vcxproj.lua
+++ b/modules/vstudio/vs2010_vcxproj.lua
@@ -2356,9 +2356,16 @@
function m.targetPlatformVersion(prj)
- local min = project.systemversion(prj)
- if min ~= nil and _ACTION >= "vs2015" then
- m.element("WindowsTargetPlatformVersion", nil, min)
+ if _ACTION >= "vs2015" then
+ local min = project.systemversion(prj)
+ -- handle special "latest" version
+ if min == "latest" then
+ -- vs2015 and lower can't build against SDK 10
+ min = iif(_ACTION >= "vs2017", m.latestSDK10Version(), nil)
+ end
+ if min ~= nil then
+ m.element("WindowsTargetPlatformVersion", nil, min)
+ end
end
end
@@ -2484,6 +2491,19 @@
return m.conditionFromConfigText(vstudio.projectConfig(cfg))
end
+--
+-- Get the latest installed SDK 10 version from the registry.
+--
+
+ function m.latestSDK10Version()
+ local arch = iif(os.is64bit(), "\\WOW6432Node\\", "\\")
+ local version = os.getWindowsRegistry("HKLM:SOFTWARE" .. arch .."Microsoft\\Microsoft SDKs\\Windows\\v10.0\\ProductVersion")
+ if version ~= nil then
+ return version .. ".0"
+ else
+ return nil
+ end
+ end
--