Browse Source

Fix COM exception when enabling migrations.

VsSolution returns an E_FAIL COM error if the project cannot be found.
If the project was in a subfolder inside the solution then VsSolution was failing to find the project
using its unique name (e.g. 'MyProject\MyProject.csproj').
pull/28/merge
Matt Ward 13 years ago
parent
commit
144ea87548
  1. 7
      src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/VsSolution.cs
  2. 26
      src/AddIns/Misc/PackageManagement/Test/Src/VisualStudio/VsSolutionTests.cs

7
src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/VsSolution.cs

@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
using System;
using System.IO;
using System.Linq;
using ICSharpCode.PackageManagement.EnvDTE;
using ICSharpCode.SharpDevelop.Project;
using Microsoft.VisualStudio;
using Microsoft.VisualStudio.Shell.Flavor;
@ -44,9 +44,10 @@ namespace ICSharpCode.PackageManagement.VisualStudio @@ -44,9 +44,10 @@ namespace ICSharpCode.PackageManagement.VisualStudio
.SingleOrDefault(project => ProjectUniqueNameMatches(project, uniqueName)) as MSBuildBasedProject;
}
bool ProjectUniqueNameMatches(IProject project, string uniqueName)
bool ProjectUniqueNameMatches(IProject msbuildProject, string uniqueName)
{
return IsCaseInsensitiveMatch(Path.GetFileName(project.FileName), uniqueName);
var project = new Project(msbuildProject as MSBuildBasedProject);
return IsCaseInsensitiveMatch(project.UniqueName, uniqueName);
}
bool IsCaseInsensitiveMatch(string a, string b)

26
src/AddIns/Misc/PackageManagement/Test/Src/VisualStudio/VsSolutionTests.cs

@ -19,9 +19,12 @@ namespace PackageManagement.Tests.VisualStudio @@ -19,9 +19,12 @@ namespace PackageManagement.Tests.VisualStudio
IVsHierarchy hierarchy;
FakePackageManagementProjectService fakeProjectService;
void CreateVsSolution()
void CreateVsSolution(string solutionFileName = @"d:\projects\test\Test.sln")
{
var msbuildSolution = new Solution(new MockProjectChangeWatcher());
msbuildSolution.FileName = solutionFileName;
fakeProjectService = new FakePackageManagementProjectService();
fakeProjectService.OpenSolution = msbuildSolution;
solution = new VsSolution(fakeProjectService);
}
@ -33,6 +36,7 @@ namespace PackageManagement.Tests.VisualStudio @@ -33,6 +36,7 @@ namespace PackageManagement.Tests.VisualStudio
void AddProjectToMSBuildSolution(string fileName)
{
TestableProject project = ProjectHelper.CreateTestProject();
project.Parent = fakeProjectService.OpenSolution;
project.FileName = fileName;
fakeProjectService.AddFakeProject(project);
}
@ -50,7 +54,7 @@ namespace PackageManagement.Tests.VisualStudio @@ -50,7 +54,7 @@ namespace PackageManagement.Tests.VisualStudio
[Test]
public void GetProjectOfUniqueName_SolutionHasProjectMatchingUniqueName_ReturnsSuccessAndVsHierarchy()
{
CreateVsSolution();
CreateVsSolution(@"d:\projects\test\Test.sln");
AddProjectToMSBuildSolution(@"d:\projects\test\Test.csproj");
int result = GetProjectOfUniqueName("Test.csproj");
@ -62,7 +66,7 @@ namespace PackageManagement.Tests.VisualStudio @@ -62,7 +66,7 @@ namespace PackageManagement.Tests.VisualStudio
[Test]
public void GetProjectOfUniqueName_SolutionHasProjectButDoesNotMatchUniqueName_ReturnsError()
{
CreateVsSolution();
CreateVsSolution(@"d:\projects\test\Test.sln");
AddProjectToMSBuildSolution(@"d:\projects\test\unknown.vbproj");
int result = GetProjectOfUniqueName("Test.csproj");
@ -73,7 +77,7 @@ namespace PackageManagement.Tests.VisualStudio @@ -73,7 +77,7 @@ namespace PackageManagement.Tests.VisualStudio
[Test]
public void GetProjectOfUniqueName_UniqueNameCaseIsIgnored_ReturnsSuccess()
{
CreateVsSolution();
CreateVsSolution(@"d:\projects\test\Test.sln");
AddProjectToMSBuildSolution(@"d:\projects\test\test.csproj");
int result = GetProjectOfUniqueName("TEST.CSPROJ");
@ -85,7 +89,7 @@ namespace PackageManagement.Tests.VisualStudio @@ -85,7 +89,7 @@ namespace PackageManagement.Tests.VisualStudio
[Test]
public void GetProjectOfUniqueName_ProjectTypeGuidsRetrievedFromAggregatableCSharpProject_ReturnsCSharpProjectTypeGuid()
{
CreateVsSolution();
CreateVsSolution(@"d:\projects\test\Test.sln");
AddProjectToMSBuildSolution(@"d:\projects\test\test.csproj");
GetProjectOfUniqueName("test.csproj");
@ -98,5 +102,17 @@ namespace PackageManagement.Tests.VisualStudio @@ -98,5 +102,17 @@ namespace PackageManagement.Tests.VisualStudio
Assert.AreEqual(VsConstants.S_OK, result);
Assert.AreEqual(ProjectTypeGuids.CSharp, guids);
}
[Test]
public void GetProjectOfUniqueName_UniqueNameIncludesProjectFolderInsideSolutionr_ReturnsSuccess()
{
CreateVsSolution(@"d:\projects\test\Test.sln");
AddProjectToMSBuildSolution(@"d:\projects\test\Project\MyProject.csproj");
int result = GetProjectOfUniqueName(@"Project\MyProject.csproj");
Assert.AreEqual(VsConstants.S_OK, result);
Assert.IsNotNull(hierarchy);
}
}
}

Loading…
Cancel
Save