Skip to content

Commit 236634d

Browse files
authored
Merge pull request #13 from Cysharp/hotfix/FixRemovedProject
Fix an error when a nested project was removed.
2 parents e6c52d9 + 9dcf809 commit 236634d

File tree

3 files changed

+59
-1
lines changed

3 files changed

+59
-1
lines changed

src/Editor/SlnMerge.cs

+6
Original file line numberDiff line numberDiff line change
@@ -541,6 +541,12 @@ private static Dictionary<string, SolutionTreeNode> BuildSolutionFlatTree(Soluti
541541

542542
if (!projectsByGuid.ContainsKey(projectGuid))
543543
{
544+
// Project has been removed from the base solution.
545+
if (!solutionFile.Projects.ContainsKey(projectGuid))
546+
{
547+
continue;
548+
}
549+
544550
projectsByGuid[projectGuid] = new SolutionTreeNode(solutionFile.Projects[projectGuid]);
545551
}
546552

src/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "com.cysharp.slnmerge",
33
"displayName": "SlnMerge",
44
"author": { "name": "Cysharp, Inc.", "url": "https://cysharp.co.jp/en/" },
5-
"version": "1.2.0",
5+
"version": "1.2.1",
66
"unity": "2018.4",
77
"description": "SlnMerge merges the solution files when generating solution file by Unity Editor.",
88
"keywords": ["Visual Studio", "sln", "IDE", "solution"],

test/SlnMerge.Tests/SlnMergeTest.cs

+52
Original file line numberDiff line numberDiff line change
@@ -446,6 +446,58 @@ public void Merge_SolutionFolder_ExistedFolder_SectionExists()
446446
".Trim().ReplacePathSeparators(), content.Trim());
447447
}
448448

449+
[Fact]
450+
public void Merge_SolutionFolder_ProjectHasBeenRemovedFromBaseSolution()
451+
{
452+
var baseSln = SolutionFile.Parse(@"C:\Path\To\Nantoka\Nantoka.Unity\Nantoka.Unity.sln".ToCurrentPlatformPathForm(), @"
453+
Microsoft Visual Studio Solution File, Format Version 12.00
454+
# Visual Studio 16
455+
Project(""{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}"") = ""Assembly-CSharp"", ""Assembly-CSharp.csproj"", ""{1E7138DC-D3E2-51A8-4059-67524470B2E7}""
456+
EndProject
457+
Global
458+
GlobalSection(NestedProjects) = preSolution
459+
{1E7138DC-D3E2-51A8-4059-67524470B2E7} = {F95BC0CF-E609-419F-B0A0-019BD5783670}
460+
{1E7138DC-D3E2-51A8-4059-67524470B2E8} = {F95BC0CF-E609-419F-B0A0-019BD5783670}
461+
EndGlobalSection
462+
EndGlobal
463+
".Trim());
464+
var overlaySln = SolutionFile.Parse(@"C:\Path\To\Nantoka\Nantoka.Unity\Nantoka.Server.sln".ToCurrentPlatformPathForm(), @"
465+
Microsoft Visual Studio Solution File, Format Version 12.00
466+
Project(""{2150E333-8FDC-42A3-9474-1A3956D46DE8}"") = ""Folder1"", ""Folder1"", ""{F95BC0CF-E609-419F-B0A0-019BD5783670}""
467+
EndProject
468+
Global
469+
EndGlobal
470+
".Trim());
471+
472+
// Merge without errors. NestedProject of removed projects remain in a merged solution.
473+
var mergedSolutionFile = SlnMerge.Merge(
474+
baseSln,
475+
overlaySln,
476+
new SlnMergeSettings()
477+
{
478+
NestedProjects = new[]
479+
{
480+
new SlnMergeSettings.NestedProject() { FolderPath = "Folder1", ProjectName = "Assembly-CSharp" },
481+
}
482+
},
483+
SlnMergeNullLogger.Instance);
484+
var content = mergedSolutionFile.ToFileContent();
485+
Assert.Equal(@"
486+
Microsoft Visual Studio Solution File, Format Version 12.00
487+
# Visual Studio 16
488+
Project(""{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}"") = ""Assembly-CSharp"", ""Assembly-CSharp.csproj"", ""{1E7138DC-D3E2-51A8-4059-67524470B2E7}""
489+
EndProject
490+
Project(""{2150E333-8FDC-42A3-9474-1A3956D46DE8}"") = ""Folder1"", ""Folder1"", ""{F95BC0CF-E609-419F-B0A0-019BD5783670}""
491+
EndProject
492+
Global
493+
GlobalSection(NestedProjects) = preSolution
494+
{1E7138DC-D3E2-51A8-4059-67524470B2E7} = {F95BC0CF-E609-419F-B0A0-019BD5783670}
495+
{1E7138DC-D3E2-51A8-4059-67524470B2E8} = {F95BC0CF-E609-419F-B0A0-019BD5783670}
496+
EndGlobalSection
497+
EndGlobal
498+
".Trim().ReplacePathSeparators(), content.Trim());
499+
}
500+
449501
[Fact]
450502
public void Merge_SolutionItems()
451503
{

0 commit comments

Comments
 (0)