From fbb332cff064790df695060fefa302ad9ff86e92 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Sat, 11 Aug 2012 13:10:18 +0100 Subject: [PATCH] EnvDTE.ProjectItems AddFromFile now adds a file outside the project folder as a link. --- .../Project/Src/EnvDTE/Project.cs | 11 +++++++++- .../Test/Src/EnvDTE/ProjectItemsTests.cs | 20 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Project.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Project.cs index 77b4717b23..4e24232086 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Project.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Project.cs @@ -175,9 +175,18 @@ namespace ICSharpCode.PackageManagement.EnvDTE FileProjectItem CreateFileProjectItemUsingPathRelativeToProject(ItemType itemType, string include) { - return new FileProjectItem(MSBuildProject, itemType) { + var fileItem = new FileProjectItem(MSBuildProject, itemType) { Include = include }; + if (IsLink(include)) { + fileItem.SetEvaluatedMetadata("Link", Path.GetFileName(include)); + } + return fileItem; + } + + bool IsLink(string include) + { + return include.StartsWith(".."); } FileProjectItem CreateFileProjectItemUsingFullPath(string path) diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemsTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemsTests.cs index c74149e114..5ed756c676 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemsTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectItemsTests.cs @@ -795,5 +795,25 @@ namespace PackageManagement.Tests.EnvDTE Assert.AreEqual(1, childItems.Count); Assert.AreEqual("Scaffolders", scaffoldersFolderItem.Name); } + + [Test] + public void AddFromFile_FullFileNameIsOutsideProjectPath_FileIsAddedToProjectAsLink() + { + CreateProjectItems(); + msbuildProject.FileName = @"d:\projects\myproject\myproject.csproj"; + string fileName = @"d:\projects\anotherproject\test.cs"; + + msbuildProject.ItemTypeToReturnFromGetDefaultItemType = ItemType.Page; + projectItems.AddFromFile(fileName); + + var fileItem = msbuildProject.Items[0] as FileProjectItem; + string linkName = fileItem.GetEvaluatedMetadata("Link"); + + Assert.AreEqual(@"..\anotherproject\test.cs", fileItem.Include); + Assert.AreEqual(fileName, fileItem.FileName); + Assert.AreEqual(ItemType.Page, fileItem.ItemType); + Assert.IsTrue(fileItem.IsLink); + Assert.AreEqual("test.cs", linkName); + } } }