From f2305c5dcd617576c0afe719f15474b2eb1a20ae Mon Sep 17 00:00:00 2001 From: bernd Date: Tue, 16 Aug 2022 10:49:59 +0200 Subject: [PATCH 1/2] Bugfix: https://github.com/microsoft/MSBuildLocator/issues/176 dotNetSdkPath may not end with / or \ - we can't concat --- src/MSBuildLocator/MSBuildLocator.cs | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/src/MSBuildLocator/MSBuildLocator.cs b/src/MSBuildLocator/MSBuildLocator.cs index 87be1e8c..b13d1dba 100644 --- a/src/MSBuildLocator/MSBuildLocator.cs +++ b/src/MSBuildLocator/MSBuildLocator.cs @@ -314,17 +314,9 @@ private static void ApplyDotNetSdkEnvironmentVariables(string dotNetSdkPath) const string MSBuildExtensionsPath = nameof(MSBuildExtensionsPath); const string MSBuildSDKsPath = nameof(MSBuildSDKsPath); - var variables = new Dictionary - { - [MSBUILD_EXE_PATH] = dotNetSdkPath + "MSBuild.dll", - [MSBuildExtensionsPath] = dotNetSdkPath, - [MSBuildSDKsPath] = dotNetSdkPath + "Sdks" - }; - - foreach (var kvp in variables) - { - Environment.SetEnvironmentVariable(kvp.Key, kvp.Value); - } + Environment.SetEnvironmentVariable(MSBUILD_EXE_PATH, Path.Combine(dotNetSdkPath, "MSBuild.dll")); + Environment.SetEnvironmentVariable(MSBuildExtensionsPath, dotNetSdkPath); + Environment.SetEnvironmentVariable(MSBuildSDKsPath, Path.Combine(dotNetSdkPath, "Sdks")); } private static bool IsMSBuildAssembly(Assembly assembly) => IsMSBuildAssembly(assembly.GetName()); From 62d1390964bd17f685c4dda40f27149e3e5273b3 Mon Sep 17 00:00:00 2001 From: bernd Date: Thu, 18 Aug 2022 09:37:30 +0200 Subject: [PATCH 2/2] Environment variable validation added --- src/MSBuildLocator/MSBuildLocator.cs | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/MSBuildLocator/MSBuildLocator.cs b/src/MSBuildLocator/MSBuildLocator.cs index b13d1dba..d820fde6 100644 --- a/src/MSBuildLocator/MSBuildLocator.cs +++ b/src/MSBuildLocator/MSBuildLocator.cs @@ -314,9 +314,24 @@ private static void ApplyDotNetSdkEnvironmentVariables(string dotNetSdkPath) const string MSBuildExtensionsPath = nameof(MSBuildExtensionsPath); const string MSBuildSDKsPath = nameof(MSBuildSDKsPath); - Environment.SetEnvironmentVariable(MSBUILD_EXE_PATH, Path.Combine(dotNetSdkPath, "MSBuild.dll")); - Environment.SetEnvironmentVariable(MSBuildExtensionsPath, dotNetSdkPath); - Environment.SetEnvironmentVariable(MSBuildSDKsPath, Path.Combine(dotNetSdkPath, "Sdks")); + AddEnvFileVar(MSBUILD_EXE_PATH, Path.Combine(dotNetSdkPath, "MSBuild.dll")); + AddEnvDirVar(MSBuildExtensionsPath, dotNetSdkPath); + AddEnvDirVar(MSBuildSDKsPath, Path.Combine(dotNetSdkPath, "Sdks")); + + void AddEnvDirVar(string name, string value) + { + if (Directory.Exists(value)) + { + Environment.SetEnvironmentVariable(name, value); + } + } + void AddEnvFileVar(string name, string value) + { + if (File.Exists(value)) + { + Environment.SetEnvironmentVariable(name, value); + } + } } private static bool IsMSBuildAssembly(Assembly assembly) => IsMSBuildAssembly(assembly.GetName());