private static void BuildExternalProjectReferences(List <string> assemblies, IEnumerable <string> nugetPackages, string projectName, DirectoryInfo programRootDir, string tempFolder) { var projectReferences = new StringBuilder(); if (assemblies != null && assemblies.Any()) { projectReferences.AppendLine(" <ItemGroup>"); foreach (var assemblyPath in assemblies) { var assembly = LoadMessageAssembly(assemblyPath); // TODO: more sophisticated name resolving projectReferences.AppendLine($@" <Reference Include=""{assembly.GetName().Name}""> <HintPath>{assembly.Location}</HintPath> </Reference>"); } projectReferences.AppendLine(" </ItemGroup>"); } var nugetPackageDefinitions = BuildNugetPackageDefinitions(nugetPackages); if (nugetPackageDefinitions.Any()) { projectReferences.AppendLine(" <ItemGroup>"); var nugetSettings = new NugetSettingsLoader(programRootDir.FullName).CalculateEffectiveSettings(); var logger = new NuGet.ConsoleLogger(); var installPath = Path.Combine(tempFolder, "ParserNugetCache", projectName); var nugetPackageInstaller = new PackageInstaller(nugetSettings, logger, installPath); logger.LogMinimal("Installing NuGet packages..."); foreach (var nugetPackage in nugetPackageDefinitions) { var package = nugetPackage; if (!package.HasVersion) { package = nugetPackageInstaller.FindLatestPackageVersion(package.Id); } // Install NuGet package (download to temp folder) if (!nugetPackage.IsRosMessageBasePackage()) // Message base is already referenced and loaded in YAMLParser project { InstallAndLoadMessageNugetPackage(nugetPackageInstaller, package); } // Add to project file projectReferences.AppendLine($" <PackageReference Include=\"{package.Id}\" Version=\"{package.Version.ToString()}\" />"); } projectReferences.AppendLine(" </ItemGroup>"); } Templates.MessagesProj = Templates.MessagesProj.Replace("$$HINTS$$", projectReferences.ToString()); }