public static UnityPluginParameter ParseUnityPluginParameter(
            Configs.UnityPlugins configs, Configs.UnityManagedPluginProject projectConfig)
        {
            Ensure.Argument.NotNull(configs, nameof(configs));
            Ensure.Argument.NotNull(projectConfig, nameof(projectConfig));

            StringToVersionInfo versions = null;

            if (projectConfig.ForMultipleVersions)
            {
                versions = projectConfig.Versions ?? new StringToVersionInfo();
                foreach (var kvp in configs.DefaultVersions)
                {
                    var ver  = kvp.Key;
                    var info = kvp.Value;
                    if (!versions.ContainsKey(ver))
                    {
                        versions.Add(ver, info);
                    }
                }
            }

            var parameter = new UnityPluginParameter
            {
                ForEditor = projectConfig.ForEditor,
                Versions  = versions?.ToDictionary(p => UnityVersion.Parse(p.Key), p => p.Value)
            };

            return(parameter);
        }
        private static void ConfigureUnityPlugins(Configs.UnityPlugins config)
        {
            foreach (var kvp in config.ManagedProjects)
            {
                var projPath = kvp.Key;
                LoggedConsole.WriteInfo($@"Configure c# project '{projPath}'.");

                var vsproj = VSProject.GetOrLoad(projPath);
                if (vsproj == null)
                {
                    LoggedConsole.WriteWarn($"Failed to load project at '{projPath}', skipped.");
                    continue;
                }

                var parameter = CSharpProjectConfigurator.ParseUnityPluginParameter(config, kvp.Value);
                CSharpProjectConfigurator.SetupUnityPluginProject(vsproj, parameter);
            }
        }
 public static UnityPluginParameter ParseUnityPluginParameter(Configs.UnityPlugins configs, string projectPath)
 {
     Ensure.Argument.NotNull(configs, nameof(configs));
     Ensure.Argument.NotNullOrEmpty(projectPath, nameof(projectPath));
     return(ParseUnityPluginParameter(configs, configs.ManagedProjects[projectPath]));
 }