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(); }
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); } }