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();
        }
示例#3
0
        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();
        }
示例#6
0
        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();
        }
示例#7
0
        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();
        }