Skip to content

Commit e2f5a17

Browse files
authored
Throw Error When Adding Projects with the Same Name but Different Paths to Solution Folder (#51131)
2 parents 110618b + 76ccfa5 commit e2f5a17

16 files changed

+100
-1
lines changed

src/Cli/dotnet/CliStrings.resx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,9 @@
252252
<data name="SolutionAlreadyContainsProject" xml:space="preserve">
253253
<value>Solution {0} already contains project {1}.</value>
254254
</data>
255+
<data name="SolutionFolderAlreadyContainsProjectWithFilename" xml:space="preserve">
256+
<value>Solution folder '{0}' already contains a project with the filename '{1}'.</value>
257+
</data>
255258
<data name="SpecifyAtLeastOneReferenceToRemove" xml:space="preserve">
256259
<value>You must specify at least one reference to remove.</value>
257260
</data>

src/Cli/dotnet/Commands/Solution/Add/SolutionAddCommand.cs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,37 @@ private void AddProject(SolutionModel solution, string fullProjectPath, ISolutio
165165
// Generate the solution folder path based on the project path
166166
SolutionFolderModel? solutionFolder = GenerateIntermediateSolutionFoldersForProjectPath(solution, solutionRelativeProjectPath);
167167

168+
// Check if a project with the same filename already exists in the solution folder
169+
string projectFileName = Path.GetFileName(solutionRelativeProjectPath);
170+
if (solutionFolder != null)
171+
{
172+
var rootFolder = solutionFolder;
173+
while (rootFolder.Parent is SolutionFolderModel parentFolder)
174+
{
175+
rootFolder = parentFolder;
176+
}
177+
178+
var existingProjectWithSameName = solution.SolutionProjects.FirstOrDefault(
179+
p => IsInSameFolderHierarchy(p.Parent, rootFolder) && Path.GetFileName(p.FilePath).Equals(projectFileName, StringComparison.OrdinalIgnoreCase));
180+
181+
if (existingProjectWithSameName != null)
182+
{
183+
throw new GracefulException(string.Format(CliStrings.SolutionFolderAlreadyContainsProjectWithFilename, rootFolder.Name, projectFileName));
184+
}
185+
}
186+
187+
static bool IsInSameFolderHierarchy(SolutionItemModel? projectParent, SolutionFolderModel rootFolder)
188+
{
189+
var current = projectParent;
190+
while (current != null)
191+
{
192+
if (current == rootFolder)
193+
return true;
194+
current = current.Parent;
195+
}
196+
return false;
197+
}
198+
168199
SolutionProjectModel project;
169200

170201
try

src/Cli/dotnet/xlf/CliStrings.cs.xlf

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Cli/dotnet/xlf/CliStrings.de.xlf

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Cli/dotnet/xlf/CliStrings.es.xlf

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Cli/dotnet/xlf/CliStrings.fr.xlf

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Cli/dotnet/xlf/CliStrings.it.xlf

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Cli/dotnet/xlf/CliStrings.ja.xlf

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Cli/dotnet/xlf/CliStrings.ko.xlf

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Cli/dotnet/xlf/CliStrings.pl.xlf

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)