public void RemoveSharedProjectFromSolution() { var sol = new Solution(); var shared = new SharedAssetsProject("C#"); shared.AddFile("Foo.cs"); var main = Services.ProjectService.CreateDotNetProject("C#"); var pref = ProjectReference.CreateProjectReference(shared); main.References.Add(pref); sol.RootFolder.AddItem(main); sol.RootFolder.AddItem(shared); Assert.IsNotNull(main.Files.GetFile("Foo.cs")); Assert.IsTrue(main.References.Contains(pref)); sol.RootFolder.Items.Remove(shared); // The shared file and the reference must be gone. Assert.IsNull(main.Files.GetFile("Foo.cs")); Assert.IsFalse(main.References.Contains(pref)); sol.Dispose(); }
public async Task AddReference() { string solFile = Util.GetSampleProject("SharedProjectTest", "SharedProjectTest.sln"); Solution sol = (Solution)await Services.ProjectService.ReadWorkspaceItem(Util.GetMonitor(), solFile); var pcs = sol.FindProjectByName("Shared"); var pc3 = (DotNetProject)sol.FindProjectByName("Console3"); var sharedFile = pcs.ItemDirectory.Combine("MyClass.cs"); Assert.IsFalse(pc3.Files.GetFile(sharedFile) != null); var r = pc3.References.FirstOrDefault(re => re.Reference == "Shared"); Assert.IsNull(r); pc3.References.Add(ProjectReference.CreateProjectReference(pcs)); r = pc3.References.FirstOrDefault(re => re.Reference == "Shared"); Assert.IsNotNull(r); Assert.IsTrue(pc3.Files.GetFile(sharedFile) != null); sol.Dispose(); }
public async Task ReevaluateNewProjectReferencesAfterSave() { string solFile = Util.GetSampleProject("console-with-libs", "console-with-libs.sln"); Solution sol = (Solution)await Services.ProjectService.ReadWorkspaceItem(Util.GetMonitor(), solFile); var p = (DotNetProject)sol.Items [0]; // Remove all existing project references and save. var existingProjectReferences = p.References.Where(r => r.ReferenceType == ReferenceType.Project).ToArray(); p.References.RemoveRange(existingProjectReferences); await p.SaveAsync(Util.GetMonitor()); // Reload solution. sol = (Solution)await Services.ProjectService.ReadWorkspaceItem(Util.GetMonitor(), solFile); p = (DotNetProject)sol.Items [0]; Assert.IsFalse(p.References.Any(r => r.ReferenceType == ReferenceType.Project)); // Add reference to library1. var library1Project = (DotNetProject)sol.Items.First(item => item.Name == "library1"); var projectReference = ProjectReference.CreateProjectReference(library1Project); p.References.Add(projectReference); await p.SaveAsync(Util.GetMonitor()); int itemAdded = 0; int itemRemoved = 0; p.ProjectItemAdded += (sender, e) => itemAdded += e.Count; p.ProjectItemRemoved += (sender, e) => itemRemoved += e.Count; await p.ReevaluateProject(Util.GetMonitor()); var library1Reference = p.References.First(r => r.Include == @"..\library1\library1.csproj"); var library1Item = p.Items.OfType <ProjectReference> ().First(r => r.Include == @"..\library1\library1.csproj"); Assert.AreEqual(0, itemAdded); Assert.AreEqual(0, itemRemoved); Assert.AreEqual(p, library1Item.OwnerProject); Assert.AreSame(library1Reference, library1Item); Assert.AreEqual(library1Reference, library1Item); sol.Dispose(); }
public void SharedProjectAddedAfterIncluder() { var sol = new Solution(); var shared = new SharedAssetsProject("C#"); shared.AddFile("Foo.cs"); // Reference to shared is added before adding project to solution var main = Services.ProjectService.CreateDotNetProject("C#"); main.References.Add(ProjectReference.CreateProjectReference(shared)); sol.RootFolder.AddItem(main); sol.RootFolder.AddItem(shared); Assert.IsNotNull(main.Files.GetFile("Foo.cs")); }
public async Task ProjItemsFileNameNotMatchingShproj_Bug20571() { string solFile = Util.GetSampleProject("SharedProjectTestBug20571", "SharedProjectTest.sln"); Solution sol = (Solution)await Services.ProjectService.ReadWorkspaceItem(Util.GetMonitor(), solFile); Assert.AreEqual(3, sol.GetAllProjects().Count()); var pc1 = (DotNetProject)sol.FindProjectByName("Console1"); Assert.IsNotNull(pc1); var pc2 = (DotNetProject)sol.FindProjectByName("Console2"); Assert.IsNotNull(pc2); var pcs = (SharedAssetsProject)sol.FindProjectByName("Shared"); Assert.IsNotNull(pcs); Assert.IsTrue(pc1.References.Any(r => r.Reference == "Shared")); var sharedFile = pcs.ItemDirectory.Combine("MyClass.cs"); Assert.IsTrue(pc1.Files.GetFile(sharedFile) != null); Assert.IsTrue(pc2.Files.GetFile(sharedFile) == null); Assert.IsTrue(pcs.Files.GetFile(sharedFile) != null); pc2.References.Add(ProjectReference.CreateProjectReference(pcs)); Assert.IsTrue(pc2.Files.GetFile(sharedFile) != null); await pc2.SaveAsync(Util.GetMonitor()); Solution sol2 = (Solution)await Services.ProjectService.ReadWorkspaceItem(Util.GetMonitor(), sol.FileName); sol.Dispose(); pc2 = (DotNetProject)sol2.FindProjectByName("Console2"); Assert.IsNotNull(pc2); Assert.IsTrue(pc2.References.Any(r => r.Reference == "Shared")); Assert.IsTrue(pc2.Files.GetFile(sharedFile) != null); sol2.Dispose(); }
public async Task BuildProjectAfterReferencingDotNetCoreProject() { FilePath solFile = Util.GetSampleProject("DotNetCoreProjectReference", "NoProjectReference.sln"); var sol = (Solution)await Services.ProjectService.ReadWorkspaceItem(Util.GetMonitor(), solFile); var p = (DotNetProject)sol.Items [0]; Assert.AreEqual("DotNetFrameworkProject", p.Name); p.RequiresMicrosoftBuild = true; FilePath projectFile = sol.BaseDirectory.Combine("DotNetCoreNetStandardProject", "DotNetCoreNetStandardProject.csproj"); var dotNetCoreProject = (Project)await sol.RootFolder.AddItem(Util.GetMonitor(), projectFile); //var dotNetCoreProject = (DotNetProject)sol.Items [0]; dotNetCoreProject.RequiresMicrosoftBuild = true; await sol.SaveAsync(Util.GetMonitor()); p.DefaultConfiguration = new DotNetProjectConfiguration("Debug") { OutputAssembly = p.BaseDirectory.Combine("bin", "test.dll") }; var res = await p.RunTarget(Util.GetMonitor(false), "Clean", ConfigurationSelector.Default); var pr = ProjectReference.CreateProjectReference((DotNetProject)dotNetCoreProject); pr.ReferenceOutputAssembly = false; pr.LocalCopy = false; p.References.Add(pr); await p.SaveAsync(Util.GetMonitor()); res = await p.RunTarget(Util.GetMonitor(false), "Build", ConfigurationSelector.Default); var buildResult = res.BuildResult; Assert.AreEqual(0, buildResult.Errors.Count); sol.Dispose(); }
public void SolutionItemsEvents() { int countFileAddedToProject = 0; int countFileRemovedFromProject = 0; int countFileRenamedInProject = 0; int countReferenceAddedToProject = 0; int countReferenceRemovedFromProject = 0; int countSolutionItemAdded = 0; int countSolutionItemRemoved = 0; Solution sol = new Solution(); sol.FileAddedToProject += delegate { countFileAddedToProject++; }; sol.FileRemovedFromProject += delegate { countFileRemovedFromProject++; }; sol.FileRenamedInProject += delegate { countFileRenamedInProject++; }; sol.ReferenceAddedToProject += delegate { countReferenceAddedToProject++; }; sol.ReferenceRemovedFromProject += delegate { countReferenceRemovedFromProject++; }; sol.SolutionItemAdded += delegate { countSolutionItemAdded++; }; sol.SolutionItemRemoved += delegate { countSolutionItemRemoved++; }; Assert.AreEqual(0, countFileAddedToProject); Assert.AreEqual(0, countFileRemovedFromProject); Assert.AreEqual(0, countFileRenamedInProject); Assert.AreEqual(0, countReferenceAddedToProject); Assert.AreEqual(0, countReferenceRemovedFromProject); Assert.AreEqual(0, countSolutionItemAdded); Assert.AreEqual(0, countSolutionItemRemoved); SolutionFolder folder = new SolutionFolder(); folder.Name = "Folder1"; sol.RootFolder.Items.Add(folder); Assert.AreEqual(1, countSolutionItemAdded); Assert.AreEqual(0, sol.Items.Count); var project = Services.ProjectService.CreateDotNetProject("C#"); project.Name = "project1"; sol.RootFolder.Items.Add(project); Assert.AreEqual(2, countSolutionItemAdded); Assert.AreEqual(1, sol.Items.Count); var project2 = Services.ProjectService.CreateDotNetProject("C#"); project2.Name = "project2"; folder.Items.Add(project2); Assert.AreEqual(3, countSolutionItemAdded); Assert.AreEqual(2, sol.Items.Count); ProjectFile p1 = new ProjectFile("test1.cs"); project2.Files.Add(p1); Assert.AreEqual(1, countFileAddedToProject); ProjectFile p2 = new ProjectFile("test1.cs"); project.Files.Add(p2); Assert.AreEqual(2, countFileAddedToProject); p1.Name = "test2.cs"; Assert.AreEqual(1, countFileRenamedInProject); p2.Name = "test2.cs"; Assert.AreEqual(2, countFileRenamedInProject); project2.Files.Remove(p1); Assert.AreEqual(1, countFileRemovedFromProject); project.Files.Remove("test2.cs"); Assert.AreEqual(2, countFileRemovedFromProject); ProjectReference pr1 = ProjectReference.CreateAssemblyReference("SomeTest"); project.References.Add(pr1); Assert.AreEqual(1, countReferenceAddedToProject); ProjectReference pr2 = ProjectReference.CreateProjectReference(project); project2.References.Add(pr2); Assert.AreEqual(2, countReferenceAddedToProject); project.References.Remove(pr1); Assert.AreEqual(1, countReferenceRemovedFromProject); sol.RootFolder.Items.Remove(project); Assert.AreEqual(2, countReferenceRemovedFromProject, "Removing a project must remove all references to it"); Assert.AreEqual(1, countSolutionItemRemoved); Assert.AreEqual(1, sol.Items.Count); folder.Items.Remove(project2); Assert.AreEqual(2, countSolutionItemRemoved); Assert.AreEqual(0, sol.Items.Count); sol.RootFolder.Items.Remove(folder); Assert.AreEqual(2, countFileAddedToProject); Assert.AreEqual(2, countFileRemovedFromProject); Assert.AreEqual(2, countFileRenamedInProject); Assert.AreEqual(2, countReferenceAddedToProject); Assert.AreEqual(2, countReferenceRemovedFromProject); Assert.AreEqual(3, countSolutionItemAdded); Assert.AreEqual(3, countSolutionItemRemoved); sol.Dispose(); }
public async Task SaveSharedProject() { Solution sol = TestProjectsChecks.CreateConsoleSolution("shared-project"); sol.ConvertToFormat(MSBuildFileFormat.VS2012); await sol.SaveAsync(Util.GetMonitor()); var pc = (DotNetProject)sol.Items [0]; // Add shared project var sp = new SharedAssetsProject() { LanguageName = "C#", DefaultNamespace = "TestNamespace" }; sp.AddFile(sol.ItemDirectory.Combine("Test.cs")); await sp.SaveAsync(Util.GetMonitor(), sol.ItemDirectory.Combine("Shared")); sol.RootFolder.AddItem(sp); await sol.SaveAsync(Util.GetMonitor()); // Make sure we compare using the same guid string solXml = File.ReadAllText(sol.FileName).Replace(pc.ItemId, "{7DE4B613-BAB6-49DE-83FA-707D4E120306}").Replace(sp.ItemId, "{8DD793BE-42C3-4D66-8359-460CEE75980D}"); string projectXml = Util.GetXmlFileInfoset(pc.FileName).Replace(pc.ItemId, "{7DE4B613-BAB6-49DE-83FA-707D4E120306}"); string sharedProjectXml = Util.GetXmlFileInfoset(sp.FileName).Replace(sp.ItemId, "{8DD793BE-42C3-4D66-8359-460CEE75980D}"); string sharedProjectItemsXml = Util.GetXmlFileInfoset(sp.FileName.ChangeExtension(".projitems")).Replace(sp.ItemId, "{8DD793BE-42C3-4D66-8359-460CEE75980D}"); string refSolXml = Util.ToWindowsEndings(File.ReadAllText(Util.GetSampleProjectPath("generated-shared-project", "TestSolution.sln"))); string refProjectXml = Util.ToWindowsEndings(Util.GetXmlFileInfoset(Util.GetSampleProjectPath("generated-shared-project", "TestProject.csproj"))); string refSharedProjectXml = Util.ToWindowsEndings(Util.GetXmlFileInfoset(Util.GetSampleProjectPath("generated-shared-project", "Shared.shproj"))); string refSharedProjectItemsXml = Util.ToWindowsEndings(Util.GetXmlFileInfoset(Util.GetSampleProjectPath("generated-shared-project", "Shared.projitems"))); Assert.AreEqual(refSolXml, solXml); Assert.AreEqual(refProjectXml, projectXml); Assert.AreEqual(refSharedProjectXml, sharedProjectXml); Assert.AreEqual(refSharedProjectItemsXml, sharedProjectItemsXml); // Add a reference var r = ProjectReference.CreateProjectReference(sp); pc.References.Add(r); await sol.SaveAsync(Util.GetMonitor()); solXml = File.ReadAllText(sol.FileName).Replace(pc.ItemId, "{7DE4B613-BAB6-49DE-83FA-707D4E120306}").Replace(sp.ItemId, "{8DD793BE-42C3-4D66-8359-460CEE75980D}"); projectXml = Util.GetXmlFileInfoset(pc.FileName).Replace(pc.ItemId, "{7DE4B613-BAB6-49DE-83FA-707D4E120306}"); sharedProjectXml = Util.GetXmlFileInfoset(sp.FileName).Replace(sp.ItemId, "{8DD793BE-42C3-4D66-8359-460CEE75980D}"); sharedProjectItemsXml = Util.GetXmlFileInfoset(sp.FileName.ChangeExtension(".projitems")).Replace(sp.ItemId, "{8DD793BE-42C3-4D66-8359-460CEE75980D}"); refProjectXml = Util.ToWindowsEndings(Util.GetXmlFileInfoset(Util.GetSampleProjectPath("generated-shared-project", "TestProject.csproj.saved1"))); Assert.AreEqual(refSolXml, solXml); Assert.AreEqual(refProjectXml, projectXml); Assert.AreEqual(refSharedProjectXml, sharedProjectXml); Assert.AreEqual(refSharedProjectItemsXml, sharedProjectItemsXml); // Add a file and change the default namespace sp.DefaultNamespace = "TestNamespace2"; var file = sp.AddFile(sol.ItemDirectory.Combine("Test2.cs")); await sol.SaveAsync(Util.GetMonitor()); solXml = File.ReadAllText(sol.FileName).Replace(pc.ItemId, "{7DE4B613-BAB6-49DE-83FA-707D4E120306}").Replace(sp.ItemId, "{8DD793BE-42C3-4D66-8359-460CEE75980D}"); projectXml = Util.GetXmlFileInfoset(pc.FileName).Replace(pc.ItemId, "{7DE4B613-BAB6-49DE-83FA-707D4E120306}"); sharedProjectXml = Util.GetXmlFileInfoset(sp.FileName).Replace(sp.ItemId, "{8DD793BE-42C3-4D66-8359-460CEE75980D}"); sharedProjectItemsXml = Util.GetXmlFileInfoset(sp.FileName.ChangeExtension(".projitems")).Replace(sp.ItemId, "{8DD793BE-42C3-4D66-8359-460CEE75980D}"); refSharedProjectItemsXml = Util.ToWindowsEndings(Util.GetXmlFileInfoset(Util.GetSampleProjectPath("generated-shared-project", "Shared.projitems.saved1"))); Assert.AreEqual(refSolXml, solXml); Assert.AreEqual(refProjectXml, projectXml); Assert.AreEqual(refSharedProjectXml, sharedProjectXml); Assert.AreEqual(refSharedProjectItemsXml, sharedProjectItemsXml); // Remove a file and restore the namespace sp.DefaultNamespace = "TestNamespace"; sp.Files.Remove(file); await sol.SaveAsync(Util.GetMonitor()); solXml = File.ReadAllText(sol.FileName).Replace(pc.ItemId, "{7DE4B613-BAB6-49DE-83FA-707D4E120306}").Replace(sp.ItemId, "{8DD793BE-42C3-4D66-8359-460CEE75980D}"); projectXml = Util.GetXmlFileInfoset(pc.FileName).Replace(pc.ItemId, "{7DE4B613-BAB6-49DE-83FA-707D4E120306}"); sharedProjectXml = Util.GetXmlFileInfoset(sp.FileName).Replace(sp.ItemId, "{8DD793BE-42C3-4D66-8359-460CEE75980D}"); sharedProjectItemsXml = Util.GetXmlFileInfoset(sp.FileName.ChangeExtension(".projitems")).Replace(sp.ItemId, "{8DD793BE-42C3-4D66-8359-460CEE75980D}"); refSharedProjectItemsXml = Util.ToWindowsEndings(Util.GetXmlFileInfoset(Util.GetSampleProjectPath("generated-shared-project", "Shared.projitems"))); Assert.AreEqual(refSolXml, solXml); Assert.AreEqual(refProjectXml, projectXml); Assert.AreEqual(refSharedProjectXml, sharedProjectXml); Assert.AreEqual(refSharedProjectItemsXml, sharedProjectItemsXml); // Remove reference pc.References.Remove(r); await sol.SaveAsync(Util.GetMonitor()); solXml = File.ReadAllText(sol.FileName).Replace(pc.ItemId, "{7DE4B613-BAB6-49DE-83FA-707D4E120306}").Replace(sp.ItemId, "{8DD793BE-42C3-4D66-8359-460CEE75980D}"); projectXml = Util.GetXmlFileInfoset(pc.FileName).Replace(pc.ItemId, "{7DE4B613-BAB6-49DE-83FA-707D4E120306}"); sharedProjectXml = Util.GetXmlFileInfoset(sp.FileName).Replace(sp.ItemId, "{8DD793BE-42C3-4D66-8359-460CEE75980D}"); sharedProjectItemsXml = Util.GetXmlFileInfoset(sp.FileName.ChangeExtension(".projitems")).Replace(sp.ItemId, "{8DD793BE-42C3-4D66-8359-460CEE75980D}"); refProjectXml = Util.ToWindowsEndings(Util.GetXmlFileInfoset(Util.GetSampleProjectPath("generated-shared-project", "TestProject.csproj"))); Assert.AreEqual(refSolXml, solXml); Assert.AreEqual(refProjectXml, projectXml); Assert.AreEqual(refSharedProjectXml, sharedProjectXml); Assert.AreEqual(refSharedProjectItemsXml, sharedProjectItemsXml); sol.Dispose(); }