Browse Source

Fix EnvDTE.ProjectItems.AddFromFileCopy not adding the file to the project items directory.

pull/28/head
Matt Ward 14 years ago
parent
commit
631faa9530
  1. 7
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs
  2. 17
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItems.cs
  3. 24
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemsTests.cs

7
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs

@ -138,5 +138,12 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -138,5 +138,12 @@ namespace ICSharpCode.PackageManagement.EnvDTE
return null;
}
}
internal string GetIncludePath(string fileName)
{
string parentFileName = (string)GetProperty(FullPathPropertyName);
string relativeDirectory = ContainingProject.GetRelativePath(parentFileName);
return Path.Combine(relativeDirectory, fileName);
}
}
}

17
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItems.cs

@ -32,12 +32,27 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -32,12 +32,27 @@ namespace ICSharpCode.PackageManagement.EnvDTE
public virtual void AddFromFileCopy(string filePath)
{
string include = Path.GetFileName(filePath);
string include = GetIncludePath(filePath);
CopyFileIntoProject(filePath, include);
project.AddFileProjectItemUsingPathRelativeToProject(include);
project.Save();
}
string GetIncludePath(string filePath)
{
string fileName = Path.GetFileName(filePath);
if (Parent is Project) {
return fileName;
}
return GetIncludePath(Parent as ProjectItem, fileName);
}
string GetIncludePath(ProjectItem projectItem, string fileName)
{
var item = Parent as ProjectItem;
return item.GetIncludePath(fileName);
}
void ThrowExceptionIfFileExists(string filePath)
{
if (fileService.FileExists(filePath)) {

24
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemsTests.cs

@ -4,6 +4,7 @@ @@ -4,6 +4,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.EnvDTE;
@ -31,6 +32,14 @@ namespace PackageManagement.Tests.EnvDTE @@ -31,6 +32,14 @@ namespace PackageManagement.Tests.EnvDTE
fakeFileService = project.FakeFileService;
}
void CreateProjectItemsFromProjectSubFolder(string projectFileName, string folderName)
{
CreateProjectItems();
msbuildProject.FileName = projectFileName;
msbuildProject.AddDirectory(folderName);
projectItems = project.ProjectItems.Item(folderName).ProjectItems;
}
void AddFileToFakeFileSystem(string directory, string relativeFileName)
{
fakeFileService.AddFilesToFakeFileSystem(directory, relativeFileName);
@ -128,6 +137,21 @@ namespace PackageManagement.Tests.EnvDTE @@ -128,6 +137,21 @@ namespace PackageManagement.Tests.EnvDTE
CollectionAssert.AreEqual(expectedFileNames, actualFileNames);
}
[Test]
public void AddFromFileCopy_AddFileNameOutsideProjectFolderFromSubFolderProjectItems_FileIsIncludedInProjectInSubFolder()
{
string projectFileName = @"d:\projects\myproject\myproject\myproject.csproj";
CreateProjectItemsFromProjectSubFolder(projectFileName, "SubFolder");
string fileName = @"d:\projects\myproject\packages\tools\test.cs";
projectItems.AddFromFileCopy(fileName);
string addedFileName = @"d:\projects\myproject\myproject\SubFolder\test.cs";
FileProjectItem fileItem = msbuildProject.FindFile(addedFileName);
Assert.AreEqual(@"SubFolder\test.cs", fileItem.Include);
}
[Test]
public void GetEnumerator_ProjectHasTwoFiles_TwoFilesReturned()
{

Loading…
Cancel
Save