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();
        }
Exemple #6
0
        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 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 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 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();
        }