public void LoadKnownUnsupportedProjects()
        {
            string solFile = Util.GetSampleProject("unsupported-project", "console-with-libs.sln");

            Solution sol  = (Solution)Services.ProjectService.ReadWorkspaceItem(Util.GetMonitor(), solFile);
            var      app  = sol.GetAllSolutionItems <SolutionEntityItem> ().FirstOrDefault(it => it.FileName.FileName == "console-with-libs.csproj");
            var      lib1 = sol.GetAllSolutionItems <SolutionEntityItem> ().FirstOrDefault(it => it.FileName.FileName == "library1.csproj");
            var      lib2 = sol.GetAllSolutionItems <SolutionEntityItem> ().FirstOrDefault(it => it.FileName.FileName == "library2.csproj");

            Assert.IsInstanceOf <DotNetAssemblyProject> (app);
            Assert.IsInstanceOf <UnknownSolutionItem> (lib1);
            Assert.IsInstanceOf <UnknownProject> (lib2);

            var p = (UnknownProject)lib2;

            Assert.AreEqual(2, p.Files.Count);

            p.AddFile(p.BaseDirectory.Combine("Test.cs"), BuildAction.Compile);

            var solText = File.ReadAllLines(solFile);

            sol.Save(new NullProgressMonitor());

            Assert.AreEqual(Util.GetXmlFileInfoset(p.FileName + ".saved"), Util.GetXmlFileInfoset(p.FileName));
            Assert.AreEqual(solText, File.ReadAllLines(solFile));
        }
        public void BuildSolutionWithUnsupportedProjects()
        {
            string solFile = Util.GetSampleProject("unsupported-project", "console-with-libs.sln");

            Solution sol = (Solution)Services.ProjectService.ReadWorkspaceItem(Util.GetMonitor(), solFile);
            var      res = sol.Build(Util.GetMonitor(), "Debug");

            // The solution has a console app that references an unsupported library. The build of the solution should fail.
            Assert.IsTrue(res.ErrorCount == 1);

            var app = (DotNetAssemblyProject)sol.GetAllSolutionItems <SolutionEntityItem> ().FirstOrDefault(it => it.FileName.FileName == "console-with-libs.csproj");

            // The console app references an unsupported library. The build of the project should fail.
            res = app.Build(Util.GetMonitor(), ConfigurationSelector.Default, true);
            Assert.IsTrue(res.ErrorCount == 1);

            // A solution build should succeed if it has unbuildable projects but those projects are not referenced by buildable projects
            app.References.Clear();
            sol.Save(Util.GetMonitor());
            res = sol.Build(Util.GetMonitor(), "Debug");
            Assert.IsTrue(res.ErrorCount == 0);

            // Regular project not referencing anything else. Should build.
            res = app.Build(Util.GetMonitor(), ConfigurationSelector.Default, true);
            Assert.IsTrue(res.ErrorCount == 0);
        }
        public void UnloadProject()
        {
            string solFile = Util.GetSampleProject("console-with-libs", "console-with-libs.sln");

            Solution           sol  = (Solution)Services.ProjectService.ReadWorkspaceItem(Util.GetMonitor(), solFile);
            SolutionEntityItem p    = sol.FindProjectByName("console-with-libs");
            SolutionEntityItem lib1 = sol.FindProjectByName("library1");
            SolutionEntityItem lib2 = sol.FindProjectByName("library2");

            Assert.IsTrue(p.Enabled);
            Assert.IsTrue(lib1.Enabled);
            Assert.IsTrue(lib2.Enabled);
            Assert.IsTrue(sol.Configurations [0].BuildEnabledForItem(p));

            p.Enabled = false;
            p.ParentFolder.ReloadItem(Util.GetMonitor(), p);

            p = sol.GetAllSolutionItems <SolutionEntityItem> ().FirstOrDefault(it => it.Name == "console-with-libs");
            Assert.IsNotNull(p);
            Assert.IsFalse(p.Enabled);
            Assert.IsTrue(lib1.Enabled);
            Assert.IsTrue(lib2.Enabled);

            p.Enabled = true;
            p.ParentFolder.ReloadItem(Util.GetMonitor(), p);

            p = sol.FindProjectByName("console-with-libs");
            Assert.IsNotNull(p);
            Assert.IsTrue(sol.Configurations [0].BuildEnabledForItem(p));

            // Reload the solution

            Assert.IsTrue(sol.Configurations [0].BuildEnabledForItem(lib1));
            lib1.Enabled = false;
            sol.Save(Util.GetMonitor());
            sol.Dispose();

            sol  = (Solution)Services.ProjectService.ReadWorkspaceItem(Util.GetMonitor(), solFile);
            lib1 = sol.GetAllSolutionItems <SolutionEntityItem> ().FirstOrDefault(it => it.Name == "library1");
            Assert.IsNotNull(lib1);
            lib1.Enabled = true;
            lib1.ParentFolder.ReloadItem(Util.GetMonitor(), lib1);

            lib1 = sol.FindProjectByName("library1");
            Assert.IsNotNull(lib1);
            Assert.IsTrue(sol.Configurations [0].BuildEnabledForItem(lib1));
        }
Exemple #4
0
        protected override void OnNameChanged(SolutionItemRenamedEventArgs e)
        {
            Solution solution = this.ParentSolution;

            if (solution != null)
            {
                foreach (DotNetProject project in solution.GetAllSolutionItems <DotNetProject>())
                {
                    if (project == this)
                    {
                        continue;
                    }

                    project.RenameReferences(e.OldName, e.NewName);
                }
            }
            base.OnNameChanged(e);
        }
Exemple #5
0
        void ExcludeEntries(IWorkspaceFileObject obj, string[] includedChildIds)
        {
            Solution sol = obj as Solution;

            if (sol != null && includedChildIds != null)
            {
                // Remove items not to be exported.

                Dictionary <string, string> childIds = new Dictionary <string, string> ();
                foreach (string it in includedChildIds)
                {
                    childIds [it] = it;
                }

                foreach (SolutionItem item in sol.GetAllSolutionItems <SolutionItem> ())
                {
                    if (!childIds.ContainsKey(item.ItemId) && item.ParentFolder != null)
                    {
                        item.ParentFolder.Items.Remove(item);
                    }
                }
            }
        }
Exemple #6
0
        public void RefreshReferences()
        {
            string solFile = Util.GetSampleProject("reference-refresh", "ConsoleProject.sln");

            Solution      sol     = (Solution)Services.ProjectService.ReadWorkspaceItem(Util.GetMonitor(), solFile);
            DotNetProject project = sol.GetAllSolutionItems <DotNetProject> ().FirstOrDefault();

            Assert.AreEqual(4, project.References.Count);

            ProjectReference r;

            r = project.References.FirstOrDefault(re => re.Reference.StartsWith("System,"));
            Assert.IsNotNull(r);
            Assert.AreEqual(r.ReferenceType, ReferenceType.Package);
            Assert.IsTrue(r.IsValid);

            r = project.References.FirstOrDefault(re => re.Reference.StartsWith("System.Xml,"));
            Assert.IsNotNull(r);
            Assert.AreEqual(r.ReferenceType, ReferenceType.Package);
            Assert.IsTrue(r.IsValid);

            r = project.References.FirstOrDefault(re => re.Reference == "test");
            Assert.IsNotNull(r);
            Assert.AreEqual(r.ReferenceType, ReferenceType.Assembly);
            Assert.AreEqual(r.GetReferencedFileNames(project.DefaultConfiguration.Selector).Single(), project.BaseDirectory.Combine("test.dll").FullPath.ToString());
            Assert.IsTrue(r.IsValid);

            r = project.References.FirstOrDefault(re => re.Reference == "gtk-sharp");
            Assert.IsNotNull(r);
            Assert.AreEqual(r.ReferenceType, ReferenceType.Assembly);
            Assert.AreEqual(r.GetReferencedFileNames(project.DefaultConfiguration.Selector).Single(), project.BaseDirectory.Combine("gtk-sharp.dll").FullPath.ToString());
            Assert.IsTrue(r.IsValid);

            // Refresh without any change

            project.RefreshReferenceStatus();

            Assert.AreEqual(4, project.References.Count);

            r = project.References.FirstOrDefault(re => re.Reference.StartsWith("System,"));
            Assert.IsNotNull(r);
            Assert.AreEqual(r.ReferenceType, ReferenceType.Package);
            Assert.IsTrue(r.IsValid);

            r = project.References.FirstOrDefault(re => re.Reference.StartsWith("System.Xml,"));
            Assert.IsNotNull(r);
            Assert.AreEqual(r.ReferenceType, ReferenceType.Package);
            Assert.IsTrue(r.IsValid);

            r = project.References.FirstOrDefault(re => re.Reference == "test");
            Assert.IsNotNull(r);
            Assert.AreEqual(r.ReferenceType, ReferenceType.Assembly);
            Assert.AreEqual(r.GetReferencedFileNames(project.DefaultConfiguration.Selector).Single(), project.BaseDirectory.Combine("test.dll").FullPath.ToString());
            Assert.IsTrue(r.IsValid);

            r = project.References.FirstOrDefault(re => re.Reference == "gtk-sharp");
            Assert.IsNotNull(r);
            Assert.AreEqual(r.ReferenceType, ReferenceType.Assembly);
            Assert.AreEqual(r.GetReferencedFileNames(project.DefaultConfiguration.Selector).Single(), project.BaseDirectory.Combine("gtk-sharp.dll").FullPath.ToString());
            Assert.IsTrue(r.IsValid);

            // Refresh after deleting test.dll

            File.Move(project.BaseDirectory.Combine("test.dll"), project.BaseDirectory.Combine("test.dll.tmp"));
            project.RefreshReferenceStatus();

            Assert.AreEqual(4, project.References.Count);

            r = project.References.FirstOrDefault(re => re.Reference.StartsWith("System,"));
            Assert.IsNotNull(r);
            Assert.AreEqual(r.ReferenceType, ReferenceType.Package);
            Assert.IsTrue(r.IsValid);

            r = project.References.FirstOrDefault(re => re.Reference.StartsWith("System.Xml,"));
            Assert.IsNotNull(r);
            Assert.AreEqual(r.ReferenceType, ReferenceType.Package);
            Assert.IsTrue(r.IsValid);

            r = project.References.FirstOrDefault(re => re.Reference == "test");
            Assert.IsNotNull(r);
            Assert.AreEqual(r.ReferenceType, ReferenceType.Package);
            Assert.IsFalse(r.IsValid);

            r = project.References.FirstOrDefault(re => re.Reference == "gtk-sharp");
            Assert.IsNotNull(r);
            Assert.AreEqual(r.ReferenceType, ReferenceType.Assembly);
            Assert.AreEqual(r.GetReferencedFileNames(project.DefaultConfiguration.Selector).Single(), project.BaseDirectory.Combine("gtk-sharp.dll").FullPath.ToString());
            Assert.IsTrue(r.IsValid);

            // Refresh after deleting gtk-sharp.dll

            File.Move(project.BaseDirectory.Combine("gtk-sharp.dll"), project.BaseDirectory.Combine("gtk-sharp.dll.tmp"));
            project.RefreshReferenceStatus();

            Assert.AreEqual(4, project.References.Count);

            r = project.References.FirstOrDefault(re => re.Reference.StartsWith("System,"));
            Assert.IsNotNull(r);
            Assert.AreEqual(r.ReferenceType, ReferenceType.Package);
            Assert.IsTrue(r.IsValid);

            r = project.References.FirstOrDefault(re => re.Reference.StartsWith("System.Xml,"));
            Assert.IsNotNull(r);
            Assert.AreEqual(r.ReferenceType, ReferenceType.Package);
            Assert.IsTrue(r.IsValid);

            r = project.References.FirstOrDefault(re => re.Reference == "test");
            Assert.IsNotNull(r);
            Assert.AreEqual(r.ReferenceType, ReferenceType.Package);
            Assert.IsFalse(r.IsValid);

            r = project.References.FirstOrDefault(re => re.Reference.StartsWith("gtk-sharp,"));
            Assert.IsNotNull(r);
            Assert.AreEqual(r.ReferenceType, ReferenceType.Package);
            Assert.AreEqual("gtk-sharp.dll", Path.GetFileName(r.GetReferencedFileNames(project.DefaultConfiguration.Selector).Single()));
            Assert.IsTrue(r.IsValid);

            // Refresh after restoring gtk-sharp.dll and test.dll

            File.Move(project.BaseDirectory.Combine("test.dll.tmp"), project.BaseDirectory.Combine("test.dll"));
            File.Move(project.BaseDirectory.Combine("gtk-sharp.dll.tmp"), project.BaseDirectory.Combine("gtk-sharp.dll"));
            project.RefreshReferenceStatus();

            Assert.AreEqual(4, project.References.Count);

            r = project.References.FirstOrDefault(re => re.Reference.StartsWith("System,"));
            Assert.IsNotNull(r);
            Assert.AreEqual(r.ReferenceType, ReferenceType.Package);
            Assert.IsTrue(r.IsValid);

            r = project.References.FirstOrDefault(re => re.Reference.StartsWith("System.Xml,"));
            Assert.IsNotNull(r);
            Assert.AreEqual(r.ReferenceType, ReferenceType.Package);
            Assert.IsTrue(r.IsValid);

            r = project.References.FirstOrDefault(re => re.Reference == "test");
            Assert.IsNotNull(r);
            Assert.AreEqual(r.ReferenceType, ReferenceType.Assembly);
            Assert.AreEqual(r.GetReferencedFileNames(project.DefaultConfiguration.Selector).Single(), project.BaseDirectory.Combine("test.dll").FullPath.ToString());
            Assert.IsTrue(r.IsValid);

            r = project.References.FirstOrDefault(re => re.Reference.StartsWith("gtk-sharp,"));
            Assert.IsNotNull(r);
            Assert.AreEqual(r.ReferenceType, ReferenceType.Assembly);
            Assert.AreEqual(r.GetReferencedFileNames(project.DefaultConfiguration.Selector).Single(), project.BaseDirectory.Combine("gtk-sharp.dll").FullPath.ToString());
            Assert.IsTrue(r.IsValid);
        }