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