コード例 #1
0
ファイル: Program.cs プロジェクト: jr-robotics/ROS.NET
        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());
        }