public void UpdateProjectReferences()
        {
            var projects = SolutionFile.Projects;

            var originalToCloned = projects
                                   .Select(p => VSProject.GetOrLoad(p.FullPath))
                                   .Where(p => p.IsCloned)
                                   .ToDictionary(p => VSProject.GetOrLoad(p.CloneSourcePath));

            foreach (var slnProj in projects)
            {
                var vsProj = VSProject.Get(slnProj.FullPath);
                foreach (var projRefItem in vsProj.FindProjectReferences(null))
                {
                    var fullPath = Path.GetFullPath(Path.Combine(vsProj.DirectoryPath, projRefItem.Include));
                    var refProj  = VSProject.GetOrLoad(fullPath);
                    if (originalToCloned.TryGetValue(refProj, out var clonedProj))
                    {
                        projRefItem.Include = PathUtil.MakeRelative(
                            ProjectDirectory.FullName + '\\', clonedProj.FilePath);
                        projRefItem.Metadata.First(m => m.ElementName == "Project").Value = clonedProj.GuidText;
                    }
                }
            }
        }
        SetupCSharpProjects(IReadOnlyDictionary <string, Configs.UnityProject.PluginProject> configs)
        {
            foreach (var kvp in configs)
            {
                var vsproj  = VSProject.GetOrLoad(kvp.Key);
                var slnProj = vsproj != null?SetupCSharpProject(vsproj, kvp.Value) : null;

                yield return(new KeyValuePair <string, SLNToolsProject>(kvp.Key, slnProj));
            }
            UpdateProjectReferences();

            SaveSolution();
        }
コード例 #3
0
        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);
            }
        }