@@ -212,6 +212,8 @@ pub enum VsVers {
212212 Vs16 ,
213213 /// Visual Studio 17 (2022)
214214 Vs17 ,
215+ /// Visual Studio 18 (2026)
216+ Vs18 ,
215217}
216218
217219/// Find the most recent installed version of Visual Studio
@@ -226,6 +228,7 @@ pub fn find_vs_version() -> Result<VsVers, String> {
226228
227229 match std:: env:: var ( "VisualStudioVersion" ) {
228230 Ok ( version) => match & version[ ..] {
231+ "18.0" => Ok ( VsVers :: Vs18 ) ,
229232 "17.0" => Ok ( VsVers :: Vs17 ) ,
230233 "16.0" => Ok ( VsVers :: Vs16 ) ,
231234 "15.0" => Ok ( VsVers :: Vs15 ) ,
@@ -242,7 +245,9 @@ pub fn find_vs_version() -> Result<VsVers, String> {
242245 _ => {
243246 // Check for the presence of a specific registry key
244247 // that indicates visual studio is installed.
245- if has_msbuild_version ( "17.0" ) {
248+ if has_msbuild_version ( "18.0" ) {
249+ Ok ( VsVers :: Vs18 )
250+ } else if has_msbuild_version ( "17.0" ) {
246251 Ok ( VsVers :: Vs17 )
247252 } else if has_msbuild_version ( "16.0" ) {
248253 Ok ( VsVers :: Vs16 )
@@ -506,6 +511,10 @@ mod impl_ {
506511 }
507512 }
508513
514+ fn find_msbuild_vs18 ( target : TargetArch , env_getter : & dyn EnvGetter ) -> Option < Tool > {
515+ find_tool_in_vs16plus_path ( r"MSBuild\Current\Bin\MSBuild.exe" , target, "18" , env_getter)
516+ }
517+
509518 fn find_msbuild_vs17 ( target : TargetArch , env_getter : & dyn EnvGetter ) -> Option < Tool > {
510519 find_tool_in_vs16plus_path ( r"MSBuild\Current\Bin\MSBuild.exe" , target, "17" , env_getter)
511520 }
@@ -570,15 +579,17 @@ mod impl_ {
570579 target : TargetArch ,
571580 env_getter : & dyn EnvGetter ,
572581 ) -> Option < Tool > {
573- find_llvm_tool_vs17 ( tool, target, env_getter)
582+ find_llvm_tool_vs17plus ( tool, target, env_getter, "18" )
583+ . or_else ( || find_llvm_tool_vs17plus ( tool, target, env_getter, "17" ) )
574584 }
575585
576- fn find_llvm_tool_vs17 (
586+ fn find_llvm_tool_vs17plus (
577587 tool : & str ,
578588 target : TargetArch ,
579589 env_getter : & dyn EnvGetter ,
590+ version : & ' static str ,
580591 ) -> Option < Tool > {
581- vs16plus_instances ( target, "17" , env_getter)
592+ vs16plus_instances ( target, version , env_getter)
582593 . filter_map ( |mut base_path| {
583594 base_path. push ( r"VC\Tools\LLVM" ) ;
584595 let host_folder = match host_arch ( ) {
@@ -1376,6 +1387,11 @@ mod impl_ {
13761387 #[ inline( always) ]
13771388 pub ( super ) fn has_msbuild_version ( version : & str , env_getter : & dyn EnvGetter ) -> bool {
13781389 match version {
1390+ "18.0" => {
1391+ find_msbuild_vs18 ( TargetArch :: X64 , env_getter) . is_some ( )
1392+ || find_msbuild_vs18 ( TargetArch :: X86 , env_getter) . is_some ( )
1393+ || find_msbuild_vs18 ( TargetArch :: Arm64 , env_getter) . is_some ( )
1394+ }
13791395 "17.0" => {
13801396 find_msbuild_vs17 ( TargetArch :: X64 , env_getter) . is_some ( )
13811397 || find_msbuild_vs17 ( TargetArch :: X86 , env_getter) . is_some ( )
@@ -1412,7 +1428,9 @@ mod impl_ {
14121428 // see http://stackoverflow.com/questions/328017/path-to-msbuild
14131429 pub ( super ) fn find_msbuild ( target : TargetArch , env_getter : & dyn EnvGetter ) -> Option < Tool > {
14141430 // VS 15 (2017) changed how to locate msbuild
1415- if let Some ( r) = find_msbuild_vs17 ( target, env_getter) {
1431+ if let Some ( r) = find_msbuild_vs18 ( target, env_getter) {
1432+ Some ( r)
1433+ } else if let Some ( r) = find_msbuild_vs17 ( target, env_getter) {
14161434 Some ( r)
14171435 } else if let Some ( r) = find_msbuild_vs16 ( target, env_getter) {
14181436 return Some ( r) ;
0 commit comments