From 3859303d207de3444301c45ee82494425cca7471 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Sat, 13 Oct 2012 13:15:19 +0100 Subject: [PATCH] Fix EF NuGet package adding web.config files to non-web projects. NuGet's IProjectSystem.IsSupportedFile now returns false for web.config files when the project is not a web project. It returns false for app.config files when the project is a web project. --- .../Project/PackageManagement.csproj | 1 + .../Src/MSBuildBasedProjectExtensions.cs | 19 +++++ .../Project/Src/SharpDevelopProjectSystem.cs | 19 ++++- .../Test/Src/Helpers/ProjectHelper.cs | 29 +++++++ .../Src/SharpDevelopProjectSystemTests.cs | 78 ++++++++++++++++++- 5 files changed, 139 insertions(+), 7 deletions(-) create mode 100644 src/AddIns/Misc/PackageManagement/Project/Src/MSBuildBasedProjectExtensions.cs diff --git a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj index f2232b76ee..bc619c953b 100644 --- a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj +++ b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj @@ -214,6 +214,7 @@ + diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/MSBuildBasedProjectExtensions.cs b/src/AddIns/Misc/PackageManagement/Project/Src/MSBuildBasedProjectExtensions.cs new file mode 100644 index 0000000000..315832c0b0 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/MSBuildBasedProjectExtensions.cs @@ -0,0 +1,19 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using ICSharpCode.SharpDevelop.Project; + +namespace ICSharpCode.PackageManagement +{ + public static class MSBuildBasedProjectExtensions + { + public static readonly Guid WebApplication = Guid.Parse(ProjectTypeGuids.WebApplication); + public static readonly Guid WebSite = Guid.Parse(ProjectTypeGuids.WebSite); + + public static bool IsWebProject(this MSBuildBasedProject project) + { + return project.HasProjectType(WebApplication) || project.HasProjectType(WebSite); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectSystem.cs b/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectSystem.cs index cb22695907..54cc07a0b9 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectSystem.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectSystem.cs @@ -162,13 +162,26 @@ namespace ICSharpCode.PackageManagement public bool IsSupportedFile(string path) { - return !IsAppConfigFile(path); + if (project.IsWebProject()) { + return !IsAppConfigFile(path); + } + return !IsWebConfigFile(path); + } + + bool IsWebConfigFile(string path) + { + return IsFileNameMatchIgnoringPath("web.config", path); } bool IsAppConfigFile(string path) { - string fileName = Path.GetFileName(path); - return IsMatchIgnoringCase("app.config", fileName); + return IsFileNameMatchIgnoringPath("app.config", path); + } + + bool IsFileNameMatchIgnoringPath(string fileName1, string path) + { + string fileName2 = Path.GetFileName(path); + return IsMatchIgnoringCase(fileName1, fileName2); } public override void AddFile(string path, Stream stream) diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectHelper.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectHelper.cs index ad6ad3c20d..f3900e8c67 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectHelper.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectHelper.cs @@ -32,6 +32,35 @@ namespace PackageManagement.Tests.Helpers return project; } + public static TestableProject CreateTestWebApplicationProject() + { + TestableProject project = CreateTestProject(); + AddWebApplicationProjectType(project); + return project; + } + + public static TestableProject CreateTestWebSiteProject() + { + TestableProject project = CreateTestProject(); + AddWebSiteProjectType(project); + return project; + } + + public static void AddWebApplicationProjectType(MSBuildBasedProject project) + { + AddProjectType(project, ProjectTypeGuids.WebApplication); + } + + public static void AddWebSiteProjectType(TestableProject project) + { + AddProjectType(project, ProjectTypeGuids.WebSite); + } + + public static void AddProjectType(MSBuildBasedProject project, string guidText) + { + project.AddProjectType(Guid.Parse(guidText)); + } + public static void AddReference(MSBuildBasedProject project, string referenceName) { var referenceProjectItem = new ReferenceProjectItem(project, referenceName); diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopProjectSystemTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopProjectSystemTests.cs index ed040be096..3dcab9e2f4 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopProjectSystemTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopProjectSystemTests.cs @@ -28,6 +28,16 @@ namespace PackageManagement.Tests project = ProjectHelper.CreateTestProject(); } + void CreateTestWebApplicationProject() + { + project = ProjectHelper.CreateTestWebApplicationProject(); + } + + void CreateTestWebSiteProject() + { + project = ProjectHelper.CreateTestWebSiteProject(); + } + void CreateTestProject(string fileName) { CreateTestProject(); @@ -133,9 +143,9 @@ namespace PackageManagement.Tests } [Test] - public void IsSupportedFile_PassedAppConfigFileName_ReturnsFalse() + public void IsSupportedFile_ProjectIsWebProjectAndPassedAppConfigFileName_ReturnsFalse() { - CreateTestProject(); + CreateTestWebApplicationProject(); CreateProjectSystem(project); string fileName = @"d:\temp\app.config"; @@ -145,9 +155,9 @@ namespace PackageManagement.Tests } [Test] - public void IsSupportedFile_PassedAppConfigFileNameInUpperCase_ReturnsFalse() + public void IsSupportedFile_ProjectIsWebProjectAndPassedAppConfigFileNameInUpperCase_ReturnsFalse() { - CreateTestProject(); + CreateTestWebApplicationProject(); CreateProjectSystem(project); string fileName = @"c:\projects\APP.CONFIG"; @@ -156,6 +166,66 @@ namespace PackageManagement.Tests Assert.IsFalse(result); } + [Test] + public void IsSupportedFile_ProjectIsWebApplicationProjectAndPassedWebConfigFileName_ReturnsTrue() + { + CreateTestWebApplicationProject(); + CreateProjectSystem(project); + + string fileName = @"d:\temp\web.config"; + bool result = projectSystem.IsSupportedFile(fileName); + + Assert.IsTrue(result); + } + + [Test] + public void IsSupportedFile_ProjectIsWebSiteProjectAndPassedWebConfigFileName_ReturnsTrue() + { + CreateTestWebSiteProject(); + CreateProjectSystem(project); + + string fileName = @"d:\temp\web.config"; + bool result = projectSystem.IsSupportedFile(fileName); + + Assert.IsTrue(result); + } + + [Test] + public void IsSupportedFile_ProjectIsCSharpProjectAndPassedWebConfigFileName_ReturnsFalse() + { + CreateTestProject(); + CreateProjectSystem(project); + + string fileName = @"d:\temp\web.config"; + bool result = projectSystem.IsSupportedFile(fileName); + + Assert.IsFalse(result); + } + + [Test] + public void IsSupportedFile_ProjectIsCSharpProjectAndPassedWebConfigFileNameInUpperCase_ReturnsFalse() + { + CreateTestProject(); + CreateProjectSystem(project); + + string fileName = @"d:\temp\WEB.CONFIG"; + bool result = projectSystem.IsSupportedFile(fileName); + + Assert.IsFalse(result); + } + + [Test] + public void IsSupportedFile_ProjectIsCSharpProjectAndPassedAppConfigFileName_ReturnsTrue() + { + CreateTestProject(); + CreateProjectSystem(project); + + string fileName = @"d:\temp\app.config"; + bool result = projectSystem.IsSupportedFile(fileName); + + Assert.IsTrue(result); + } + [Test] public void ReferenceExists_ProjectHasReferenceAndFullPathToAssemblyPassedToMethod_ReturnsTrue() {