in src/Microsoft.VisualStudio.SlnGen/Program.cs [141:243]
internal static int Execute(ProgramArguments arguments, IConsole console)
{
if (arguments.Version)
{
console.WriteLine(ThisAssembly.AssemblyInformationalVersion);
return 0;
}
MSBuildFeatureFlags featureFlags = new MSBuildFeatureFlags
{
CacheFileEnumerations = true,
LoadAllFilesAsReadOnly = true,
MSBuildSkipEagerWildCardEvaluationRegexes = true,
UseSimpleProjectRootElementCacheConcurrency = true,
#if NETFRAMEWORK
MSBuildExePath = CurrentDevelopmentEnvironment.MSBuildExe.FullName,
#else
MSBuildExePath = CurrentDevelopmentEnvironment.MSBuildDll.FullName,
#endif
};
LoggerVerbosity verbosity = ForwardingLogger.ParseLoggerVerbosity(arguments.Verbosity?.LastOrDefault());
ConsoleForwardingLogger consoleLogger = new ConsoleForwardingLogger(console)
{
NoWarn = arguments.NoWarn,
Parameters = arguments.ConsoleLoggerParameters.Arguments.IsNullOrWhiteSpace() ? "ForceNoAlign=true;Summary" : arguments.ConsoleLoggerParameters.Arguments,
Verbosity = verbosity,
};
ForwardingLogger forwardingLogger = new ForwardingLogger(GetLoggers(consoleLogger, arguments), arguments.NoWarn)
{
Verbosity = verbosity,
};
using (ProjectCollection projectCollection = GetProjectCollection(forwardingLogger))
{
try
{
forwardingLogger.LogMessageLow("Command Line Arguments: {0}", Environment.CommandLine);
#if !NETFRAMEWORK
forwardingLogger.LogMessageLow("Using .NET Core MSBuild from \"{0}\"", CurrentDevelopmentEnvironment.MSBuildDll);
#endif
if (CurrentDevelopmentEnvironment.MSBuildExe != null)
{
forwardingLogger.LogMessageLow("Using .NET Framework MSBuild from \"{0}\"", CurrentDevelopmentEnvironment.MSBuildExe);
}
foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies().Where(i => i.FullName.StartsWith("Microsoft.Build")))
{
forwardingLogger.LogMessageLow("Loaded assembly: \"{0}\" from \"{1}\"", assembly.FullName, assembly.Location);
}
forwardingLogger.LogMessageLow("Current development environment:");
forwardingLogger.LogMessageLow(" FrameworkDescription: \"{0}\"", RuntimeInformation.FrameworkDescription);
forwardingLogger.LogMessageLow(" DotNetCoreVersion: \"{0}\"", CurrentDevelopmentEnvironment.DotNetSdkVersion);
forwardingLogger.LogMessageLow(" DotNetSdkMajorVersion: \"{0}\"", CurrentDevelopmentEnvironment.DotNetSdkMajorVersion);
forwardingLogger.LogMessageLow(" IsCorext: \"{0}\"", CurrentDevelopmentEnvironment.IsCorext);
forwardingLogger.LogMessageLow(" MSBuildDll: \"{0}\"", CurrentDevelopmentEnvironment.MSBuildDll);
forwardingLogger.LogMessageLow(" MSBuildExe: \"{0}\"", CurrentDevelopmentEnvironment.MSBuildExe);
forwardingLogger.LogMessageLow(" VisualStudio: \"{0}\"", CurrentDevelopmentEnvironment.VisualStudio?.InstallationPath);
if (!arguments.TryGetEntryProjectPaths(forwardingLogger, out IReadOnlyList<string> projectEntryPaths))
{
return 1;
}
(TimeSpan evaluationTime, int evaluationCount) = ProjectLoader.LoadProjects(CurrentDevelopmentEnvironment.MSBuildExe, projectCollection, projectEntryPaths, arguments.GetGlobalProperties(), forwardingLogger);
if (forwardingLogger.HasLoggedErrors)
{
return 1;
}
(string solutionFileFullPath, int customProjectTypeGuidCount, int solutionItemCount, Guid solutionGuid) = SlnFile.GenerateSolutionFile(arguments, projectCollection.LoadedProjects.Where(i => !i.GlobalProperties.ContainsKey("TargetFramework")), forwardingLogger);
featureFlags.Dispose();
if (!VisualStudioLauncher.TryLaunch(arguments, CurrentDevelopmentEnvironment.VisualStudio, solutionFileFullPath, forwardingLogger))
{
return 1;
}
Program.LogTelemetry(arguments, evaluationTime, evaluationCount, customProjectTypeGuidCount, solutionItemCount, solutionGuid);
}
catch (InvalidProjectFileException e)
{
forwardingLogger.LogError(e.Message, e.ErrorCode, e.ProjectFile, e.LineNumber, e.ColumnNumber);
return 1;
}
catch (Exception e)
{
forwardingLogger.LogError($"Unhandled exception: {e}");
throw;
}
}
return 0;
}