public void RemoveFromProject(RemoveFromProjectRequest request) { var relativeProject = _solution.ProjectContainingFile(request.FileName); if (relativeProject == null || relativeProject is OrphanProject) { throw new ProjectNotFoundException(string.Format("Unable to find project relative to file {0}", request.FileName)); } var project = relativeProject.AsXml(); var separator = relativeProject.FileName.Contains ("/") ? "/" : "\\"; var relativeFileName = request.FileName.Replace(relativeProject.FileName.Substring(0, relativeProject.FileName.LastIndexOf(separator) + 1), "") .Replace("/", @"\"); var fileNode = project.CompilationNodes() .FirstOrDefault(n => n.Attribute("Include") .Value.Equals(relativeFileName, StringComparison.InvariantCultureIgnoreCase)); if (fileNode != null) { RemoveFileFromProject(relativeProject, request.FileName); project.CompilationNodes().Where(n => n.Attribute("Include").Value.Equals(relativeFileName, StringComparison.InvariantCultureIgnoreCase)).Remove(); var nodes = project.CompilationNodes(); if (!nodes.Any()) { project.ItemGroupNodes().Where(n => !n.Nodes().Any()).Remove(); } relativeProject.Save(project); } }
public void ShouldRemoveFileFromProjectXml() { var project = new FakeProject(fileName: @"c:\test\code\fake.csproj"); project.AddFile("some content", @"c:\test\code\test.cs"); var xml = @" <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""> <ItemGroup> <Compile Include=""Hello.cs""/> <Compile Include=""Test.cs""/> </ItemGroup> </Project>"; project.XmlRepresentation = XDocument.Parse(xml); var expectedXml = XDocument.Parse(@" <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""> <ItemGroup> <Compile Include=""Hello.cs""/> </ItemGroup> </Project>"); var solution = new FakeSolution(@"c:\test\fake.sln"); solution.Projects.Add(project); var request = new RemoveFromProjectRequest { FileName = @"c:\test\code\test.cs" }; var handler = new RemoveFromProjectHandler(solution); handler.RemoveFromProject(request); project.AsXml().ToString().ShouldEqual(expectedXml.ToString()); }
public void RemoveFromProject(RemoveFromProjectRequest request) { var relativeProject = _solution.ProjectContainingFile(request.FileName); if (relativeProject == null || relativeProject is OrphanProject) { throw new ProjectNotFoundException(string.Format("Unable to find project relative to file {0}", request.FileName)); } var project = relativeProject.AsXml(); var separator = relativeProject.FileName.Contains("/") ? "/" : "\\"; var relativeFileName = request.FileName.Replace(relativeProject.FileName.Substring(0, relativeProject.FileName.LastIndexOf(separator) + 1), "") .Replace("/", @"\"); var fileNode = project.CompilationNodes() .FirstOrDefault(n => n.Attribute("Include") .Value.Equals(relativeFileName, StringComparison.InvariantCultureIgnoreCase)); if (fileNode != null) { RemoveFileFromProject(relativeProject, request.FileName); project.CompilationNodes().Where(n => n.Attribute("Include").Value.Equals(relativeFileName, StringComparison.InvariantCultureIgnoreCase)).Remove(); var nodes = project.CompilationNodes(); if (!nodes.Any()) { project.ItemGroupNodes().Where(n => !n.Nodes().Any()).Remove(); } relativeProject.Save(project); } }
public void ShouldRemoveItemGroupWhenRemovingLastFile() { XNamespace ns = "http://schemas.microsoft.com/developer/msbuild/2003"; var project = new FakeProject(fileName: @"c:\test\code\fake.csproj"); project.AddFile("some content", @"c:\test\code\test.cs"); var xml = @" <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""> <ItemGroup> <Compile Include=""Test.cs""/> </ItemGroup> </Project>"; project.XmlRepresentation = XDocument.Parse(xml); var solution = new FakeSolution(@"c:\test\fake.sln"); solution.Projects.Add(project); var request = new RemoveFromProjectRequest { FileName = @"c:\test\code\test.cs" }; var handler = new RemoveFromProjectHandler(solution); handler.RemoveFromProject(request); project.AsXml().Descendants(ns + "ItemGroup").Count().ShouldEqual(0); }
public void ShouldRemoveFileFromProject() { var project = new FakeProject(fileName: @"c:\test\code\fake.csproj"); project.AddFile("some content", @"c:\test\code\test.cs"); var xml = @" <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""> <ItemGroup> <Compile Include=""Test.cs""/> </ItemGroup> </Project>"; project.XmlRepresentation = XDocument.Parse(xml); var solution = new FakeSolution(@"c:\test\fake.sln"); solution.Projects.Add(project); var request = new RemoveFromProjectRequest { FileName = @"c:\test\code\test.cs" }; var handler = new RemoveFromProjectHandler(solution); handler.RemoveFromProject(request); project.Files.ShouldBeEmpty(); }
public void ShouldRemoveFileFromProjectXml() { var xml = @" <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""> <ItemGroup> <Compile Include=""Hello.cs""/> <Compile Include=""Test.cs""/> </ItemGroup> </Project>"; var project = GetProject(xml, @"c:\test\code\fake1.csproj"); var expectedXml = XDocument.Parse(@" <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""> <ItemGroup> <Compile Include=""Hello.cs""/> </ItemGroup> </Project>"); var solution = new FakeSolution(@"c:\test\fake.sln"); solution.Projects.Add(project); var request = new RemoveFromProjectRequest { FileName = @"c:\test\code\test.cs" }; var handler = new RemoveFromProjectHandler(solution); handler.RemoveFromProject(request); project.AsXml().ToString().ShouldEqual(expectedXml.ToString()); }
public void ShouldThrowProjectNotFoundExceptionWhenProjectNotFound() { var project = new FakeProject(fileName: @"/test/code/fake.csproj"); var solution = new FakeSolution(@"/test/fake.sln"); solution.Projects.Add(project); var request = new RemoveFromProjectRequest { FileName = @"/test/folder/Test.cs" }; var handler = new RemoveFromProjectHandler(solution); handler.RemoveFromProject(request); }
public void ShouldRemoveFileFromProject() { var xml = @" <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""> <ItemGroup> <Compile Include=""Test.cs""/> </ItemGroup> </Project>"; var project = GetProject(xml); var solution = new FakeSolution(@"c:\test\fake.sln"); solution.Projects.Add(project); var request = new RemoveFromProjectRequest { FileName = @"c:\test\code\test.cs" }; var handler = new RemoveFromProjectHandler(solution); handler.RemoveFromProject(request); project.Files.ShouldBeEmpty(); }