public virtual void Remove(CodeFile codeFile, MsBuildProject msBuildProject)
        {
            var relativeItemPath = this.GetProjectRelativePath(codeFile.Location, msBuildProject);
            var existingItems    = msBuildProject.FindProjectItems(relativeItemPath).ToList();

            foreach (var item in existingItems)
            {
                msBuildProject.RemoveItem(item);
            }
        }
        public virtual void AddOrUpdate(CodeFile codeFile, MsBuildProject msBuildProject)
        {
            var relativeItemPath = this.GetProjectRelativePath(codeFile.Location, msBuildProject);
            var fullItemPath     = this.fileSystem.Path.GetFullPath(this.fileSystem.Path.Combine(this.fileSystem.Path.GetDirectoryName(msBuildProject.FullPath), relativeItemPath));
            var existingItems    = msBuildProject.FindProjectItems(fullItemPath).ToList();

            if (existingItems.All(i => i.ItemType != this.itemType))
            {
                msBuildProject.AddItem(this.itemType, relativeItemPath);
            }

            this.UpdateFileContent(fullItemPath, codeFile.SourceCodeText);
        }