Skip to content

Commit 3bfa303

Browse files
authored
Move Microsoft.DotNet.FileBasedPrograms source package reference to ProjectTools (#51995)
1 parent eb560e2 commit 3bfa303

21 files changed

+208
-234
lines changed

.editorconfig

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,8 @@ dotnet_diagnostic.CA5381.severity = warning
265265
dotnet_diagnostic.CA5384.severity = warning
266266
# Use Rivest–Shamir–Adleman (RSA) Algorithm With Sufficient Key Size
267267
dotnet_diagnostic.CA5385.severity = warning
268+
# Parameter has no matching param tag in the XML comment
269+
dotnet_diagnostic.CS1573.severity = suggestion
268270
dotnet_diagnostic.CS1591.severity = suggestion
269271
# UseIsNullCheck
270272
dotnet_diagnostic.IDE0041.severity = warning

src/Cli/Microsoft.DotNet.FileBasedPrograms/ExternalHelpers.cs

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -40,25 +40,3 @@ public static partial bool IsPathFullyQualified(string path)
4040

4141
#endif
4242
}
43-
44-
// https://github.com/dotnet/sdk/issues/51487: Remove usage of GracefulException from the source package
45-
#if FILE_BASED_PROGRAMS_SOURCE_PACKAGE_GRACEFUL_EXCEPTION
46-
internal class GracefulException : Exception
47-
{
48-
public GracefulException()
49-
{
50-
}
51-
52-
public GracefulException(string? message) : base(message)
53-
{
54-
}
55-
56-
public GracefulException(string format, string arg) : this(string.Format(format, arg))
57-
{
58-
}
59-
60-
public GracefulException(string? message, Exception? innerException) : base(message, innerException)
61-
{
62-
}
63-
}
64-
#endif

src/Cli/Microsoft.DotNet.FileBasedPrograms/FileLevelDirectiveHelpers.cs

Lines changed: 64 additions & 128 deletions
Large diffs are not rendered by default.

src/Cli/Microsoft.DotNet.FileBasedPrograms/InternalAPI.Unshipped.txt

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Package.Package(in Microsoft.
1010
Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Package.Version.get -> string?
1111
Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Package.Version.init -> void
1212
Microsoft.DotNet.FileBasedPrograms.CSharpDirective.ParseContext
13-
Microsoft.DotNet.FileBasedPrograms.CSharpDirective.ParseContext.Diagnostics.get -> Microsoft.DotNet.FileBasedPrograms.DiagnosticBag
14-
Microsoft.DotNet.FileBasedPrograms.CSharpDirective.ParseContext.Diagnostics.init -> void
1513
Microsoft.DotNet.FileBasedPrograms.CSharpDirective.ParseContext.DirectiveKind.get -> string!
1614
Microsoft.DotNet.FileBasedPrograms.CSharpDirective.ParseContext.DirectiveKind.init -> void
1715
Microsoft.DotNet.FileBasedPrograms.CSharpDirective.ParseContext.DirectiveText.get -> string!
1816
Microsoft.DotNet.FileBasedPrograms.CSharpDirective.ParseContext.DirectiveText.init -> void
1917
Microsoft.DotNet.FileBasedPrograms.CSharpDirective.ParseContext.Info.get -> Microsoft.DotNet.FileBasedPrograms.CSharpDirective.ParseInfo
2018
Microsoft.DotNet.FileBasedPrograms.CSharpDirective.ParseContext.Info.init -> void
2119
Microsoft.DotNet.FileBasedPrograms.CSharpDirective.ParseContext.ParseContext() -> void
20+
Microsoft.DotNet.FileBasedPrograms.CSharpDirective.ParseContext.ReportError.get -> Microsoft.DotNet.FileBasedPrograms.ErrorReporter!
21+
Microsoft.DotNet.FileBasedPrograms.CSharpDirective.ParseContext.ReportError.init -> void
2222
Microsoft.DotNet.FileBasedPrograms.CSharpDirective.ParseContext.SourceFile.get -> Microsoft.DotNet.FileBasedPrograms.SourceFile
2323
Microsoft.DotNet.FileBasedPrograms.CSharpDirective.ParseContext.SourceFile.init -> void
2424
Microsoft.DotNet.FileBasedPrograms.CSharpDirective.ParseInfo
@@ -30,7 +30,7 @@ Microsoft.DotNet.FileBasedPrograms.CSharpDirective.ParseInfo.Span.init -> void
3030
Microsoft.DotNet.FileBasedPrograms.CSharpDirective.ParseInfo.TrailingWhiteSpace.get -> Microsoft.DotNet.FileBasedPrograms.WhiteSpaceInfo
3131
Microsoft.DotNet.FileBasedPrograms.CSharpDirective.ParseInfo.TrailingWhiteSpace.init -> void
3232
Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Project
33-
Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Project.EnsureProjectFilePath(Microsoft.DotNet.FileBasedPrograms.SourceFile sourceFile, Microsoft.DotNet.FileBasedPrograms.DiagnosticBag diagnostics) -> Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Project!
33+
Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Project.EnsureProjectFilePath(Microsoft.DotNet.FileBasedPrograms.SourceFile sourceFile, Microsoft.DotNet.FileBasedPrograms.ErrorReporter! reportError) -> Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Project!
3434
Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Project.ExpandedName.get -> string?
3535
Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Project.ExpandedName.init -> void
3636
Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Project.NameKind
@@ -53,20 +53,11 @@ Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Sdk.Version.get -> string?
5353
Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Sdk.Version.init -> void
5454
Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Shebang
5555
Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Shebang.Shebang(in Microsoft.DotNet.FileBasedPrograms.CSharpDirective.ParseInfo info) -> void
56-
Microsoft.DotNet.FileBasedPrograms.DiagnosticBag
57-
Microsoft.DotNet.FileBasedPrograms.DiagnosticBag.AddError(Microsoft.DotNet.FileBasedPrograms.SourceFile sourceFile, Microsoft.CodeAnalysis.Text.TextSpan textSpan, string! message, System.Exception? inner = null) -> void
58-
Microsoft.DotNet.FileBasedPrograms.DiagnosticBag.AddError<T>(Microsoft.DotNet.FileBasedPrograms.SourceFile sourceFile, Microsoft.CodeAnalysis.Text.TextSpan span, string! message, System.Exception? inner = null) -> T?
59-
Microsoft.DotNet.FileBasedPrograms.DiagnosticBag.Builder.get -> System.Collections.Immutable.ImmutableArray<Microsoft.DotNet.FileBasedPrograms.SimpleDiagnostic!>.Builder?
60-
Microsoft.DotNet.FileBasedPrograms.DiagnosticBag.DiagnosticBag() -> void
61-
Microsoft.DotNet.FileBasedPrograms.DiagnosticBag.IgnoreDiagnostics.get -> bool
56+
Microsoft.DotNet.FileBasedPrograms.ErrorReporter
57+
Microsoft.DotNet.FileBasedPrograms.ErrorReporters
6258
Microsoft.DotNet.FileBasedPrograms.ExternalHelpers
6359
Microsoft.DotNet.FileBasedPrograms.ExternalHelpers.ExternalHelpers() -> void
6460
Microsoft.DotNet.FileBasedPrograms.FileLevelDirectiveHelpers
65-
Microsoft.DotNet.FileBasedPrograms.GracefulException
66-
Microsoft.DotNet.FileBasedPrograms.GracefulException.GracefulException() -> void
67-
Microsoft.DotNet.FileBasedPrograms.GracefulException.GracefulException(string! format, string! arg) -> void
68-
Microsoft.DotNet.FileBasedPrograms.GracefulException.GracefulException(string? message) -> void
69-
Microsoft.DotNet.FileBasedPrograms.GracefulException.GracefulException(string? message, System.Exception? innerException) -> void
7061
Microsoft.DotNet.FileBasedPrograms.MSBuildUtilities
7162
Microsoft.DotNet.FileBasedPrograms.MSBuildUtilities.MSBuildUtilities() -> void
7263
Microsoft.DotNet.FileBasedPrograms.NamedDirectiveComparer
@@ -104,6 +95,7 @@ Microsoft.DotNet.FileBasedPrograms.WhiteSpaceInfo
10495
Microsoft.DotNet.FileBasedPrograms.WhiteSpaceInfo.LineBreaks -> int
10596
Microsoft.DotNet.FileBasedPrograms.WhiteSpaceInfo.TotalLength -> int
10697
Microsoft.DotNet.FileBasedPrograms.WhiteSpaceInfo.WhiteSpaceInfo() -> void
98+
Microsoft.DotNet.ProjectTools.ProjectLocator
10799
override abstract Microsoft.DotNet.FileBasedPrograms.CSharpDirective.ToString() -> string!
108100
override Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Package.ToString() -> string!
109101
override Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Project.ToString() -> string!
@@ -116,23 +108,24 @@ static Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Parse(in Microsoft.Dot
116108
static Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Project.Parse(in Microsoft.DotNet.FileBasedPrograms.CSharpDirective.ParseContext context) -> Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Project?
117109
static Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Property.Parse(in Microsoft.DotNet.FileBasedPrograms.CSharpDirective.ParseContext context) -> Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Property?
118110
static Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Sdk.Parse(in Microsoft.DotNet.FileBasedPrograms.CSharpDirective.ParseContext context) -> Microsoft.DotNet.FileBasedPrograms.CSharpDirective.Sdk?
119-
static Microsoft.DotNet.FileBasedPrograms.DiagnosticBag.Collect(out System.Collections.Immutable.ImmutableArray<Microsoft.DotNet.FileBasedPrograms.SimpleDiagnostic!>.Builder! builder) -> Microsoft.DotNet.FileBasedPrograms.DiagnosticBag
120-
static Microsoft.DotNet.FileBasedPrograms.DiagnosticBag.Ignore() -> Microsoft.DotNet.FileBasedPrograms.DiagnosticBag
121-
static Microsoft.DotNet.FileBasedPrograms.DiagnosticBag.ThrowOnFirst() -> Microsoft.DotNet.FileBasedPrograms.DiagnosticBag
111+
static Microsoft.DotNet.FileBasedPrograms.ErrorReporters.CreateCollectingReporter(out System.Collections.Immutable.ImmutableArray<Microsoft.DotNet.FileBasedPrograms.SimpleDiagnostic!>.Builder! builder) -> Microsoft.DotNet.FileBasedPrograms.ErrorReporter!
122112
static Microsoft.DotNet.FileBasedPrograms.ExternalHelpers.CombineHashCodes(int value1, int value2) -> int
123113
static Microsoft.DotNet.FileBasedPrograms.ExternalHelpers.GetRelativePath(string! relativeTo, string! path) -> string!
124114
static Microsoft.DotNet.FileBasedPrograms.ExternalHelpers.IsPathFullyQualified(string! path) -> bool
125115
static Microsoft.DotNet.FileBasedPrograms.FileLevelDirectiveHelpers.CreateTokenizer(Microsoft.CodeAnalysis.Text.SourceText! text) -> Microsoft.CodeAnalysis.CSharp.SyntaxTokenParser!
126-
static Microsoft.DotNet.FileBasedPrograms.FileLevelDirectiveHelpers.EvaluateDirectives(Microsoft.Build.Execution.ProjectInstance? project, System.Collections.Immutable.ImmutableArray<Microsoft.DotNet.FileBasedPrograms.CSharpDirective!> directives, Microsoft.DotNet.FileBasedPrograms.SourceFile sourceFile, Microsoft.DotNet.FileBasedPrograms.DiagnosticBag diagnostics) -> System.Collections.Immutable.ImmutableArray<Microsoft.DotNet.FileBasedPrograms.CSharpDirective!>
127-
static Microsoft.DotNet.FileBasedPrograms.FileLevelDirectiveHelpers.FindDirectives(Microsoft.DotNet.FileBasedPrograms.SourceFile sourceFile, bool reportAllErrors, Microsoft.DotNet.FileBasedPrograms.DiagnosticBag diagnostics) -> System.Collections.Immutable.ImmutableArray<Microsoft.DotNet.FileBasedPrograms.CSharpDirective!>
128-
static Microsoft.DotNet.FileBasedPrograms.FileLevelDirectiveHelpers.FindLeadingDirectives(Microsoft.DotNet.FileBasedPrograms.SourceFile sourceFile, Microsoft.CodeAnalysis.SyntaxTriviaList triviaList, Microsoft.DotNet.FileBasedPrograms.DiagnosticBag diagnostics, System.Collections.Immutable.ImmutableArray<Microsoft.DotNet.FileBasedPrograms.CSharpDirective!>.Builder? builder) -> void
116+
static Microsoft.DotNet.FileBasedPrograms.FileLevelDirectiveHelpers.EvaluateDirectives(Microsoft.Build.Execution.ProjectInstance? project, System.Collections.Immutable.ImmutableArray<Microsoft.DotNet.FileBasedPrograms.CSharpDirective!> directives, Microsoft.DotNet.FileBasedPrograms.SourceFile sourceFile, Microsoft.DotNet.FileBasedPrograms.ErrorReporter! errorReporter) -> System.Collections.Immutable.ImmutableArray<Microsoft.DotNet.FileBasedPrograms.CSharpDirective!>
117+
static Microsoft.DotNet.FileBasedPrograms.FileLevelDirectiveHelpers.FindDirectives(Microsoft.DotNet.FileBasedPrograms.SourceFile sourceFile, bool reportAllErrors, Microsoft.DotNet.FileBasedPrograms.ErrorReporter! reportError) -> System.Collections.Immutable.ImmutableArray<Microsoft.DotNet.FileBasedPrograms.CSharpDirective!>
118+
static Microsoft.DotNet.FileBasedPrograms.FileLevelDirectiveHelpers.FindLeadingDirectives(Microsoft.DotNet.FileBasedPrograms.SourceFile sourceFile, Microsoft.CodeAnalysis.SyntaxTriviaList triviaList, Microsoft.DotNet.FileBasedPrograms.ErrorReporter! reportError, System.Collections.Immutable.ImmutableArray<Microsoft.DotNet.FileBasedPrograms.CSharpDirective!>.Builder? builder) -> void
129119
static Microsoft.DotNet.FileBasedPrograms.MSBuildUtilities.ConvertStringToBool(string? parameterValue, bool defaultValue = false) -> bool
130120
static Microsoft.DotNet.FileBasedPrograms.Patterns.DisallowedNameCharacters.get -> System.Text.RegularExpressions.Regex!
131121
static Microsoft.DotNet.FileBasedPrograms.Patterns.EscapedCompilerOption.get -> System.Text.RegularExpressions.Regex!
132122
static Microsoft.DotNet.FileBasedPrograms.Patterns.Whitespace.get -> System.Text.RegularExpressions.Regex!
133123
static Microsoft.DotNet.FileBasedPrograms.SourceFile.Load(string! filePath) -> Microsoft.DotNet.FileBasedPrograms.SourceFile
134124
static Microsoft.DotNet.FileBasedPrograms.SourceFile.operator !=(Microsoft.DotNet.FileBasedPrograms.SourceFile left, Microsoft.DotNet.FileBasedPrograms.SourceFile right) -> bool
135125
static Microsoft.DotNet.FileBasedPrograms.SourceFile.operator ==(Microsoft.DotNet.FileBasedPrograms.SourceFile left, Microsoft.DotNet.FileBasedPrograms.SourceFile right) -> bool
126+
static Microsoft.DotNet.ProjectTools.ProjectLocator.TryGetProjectFileFromDirectory(string! projectDirectory, out string? projectFilePath, out string? error) -> bool
127+
static readonly Microsoft.DotNet.FileBasedPrograms.ErrorReporters.IgnoringReporter -> Microsoft.DotNet.FileBasedPrograms.ErrorReporter!
136128
static readonly Microsoft.DotNet.FileBasedPrograms.NamedDirectiveComparer.Instance -> Microsoft.DotNet.FileBasedPrograms.NamedDirectiveComparer!
129+
virtual Microsoft.DotNet.FileBasedPrograms.ErrorReporter.Invoke(Microsoft.DotNet.FileBasedPrograms.SourceFile sourceFile, Microsoft.CodeAnalysis.Text.TextSpan textSpan, string! message) -> void
137130
~override Microsoft.DotNet.FileBasedPrograms.SourceFile.Equals(object obj) -> bool
138131
~override Microsoft.DotNet.FileBasedPrograms.SourceFile.ToString() -> string

src/Cli/Microsoft.DotNet.FileBasedPrograms/Microsoft.DotNet.FileBasedPrograms.Package.csproj

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,12 @@
2020
<!-- Remove once https://github.com/NuGet/Home/issues/8583 is fixed -->
2121
<NoWarn>$(NoWarn);NU5128</NoWarn>
2222
<EnableDefaultItems>false</EnableDefaultItems>
23-
<DefineConstants>$(DefineConstants);FILE_BASED_PROGRAMS_SOURCE_PACKAGE_BUILD;FILE_BASED_PROGRAMS_SOURCE_PACKAGE_GRACEFUL_EXCEPTION</DefineConstants>
23+
<DefineConstants>$(DefineConstants);FILE_BASED_PROGRAMS_SOURCE_PACKAGE_BUILD</DefineConstants>
2424
<!-- Files must individually enable nullable in source packages -->
2525
<Nullable>disable</Nullable>
2626
</PropertyGroup>
2727

2828
<ItemGroup>
29-
<PackageReference Include="Microsoft.Build" />
3029
<PackageReference Include="Microsoft.CodeAnalysis.Contracts" PrivateAssets="all" />
3130
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" />
3231
<PackageReference Include="System.Text.Json" VersionOverride="$(SystemTextJsonToolsetPackageVersion)" />
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
4+
#nullable enable
5+
6+
using System;
7+
using System.Diagnostics.CodeAnalysis;
8+
using System.IO;
9+
using System.Linq;
10+
using Microsoft.DotNet.FileBasedPrograms;
11+
12+
namespace Microsoft.DotNet.ProjectTools;
13+
14+
internal static class ProjectLocator
15+
{
16+
public static bool TryGetProjectFileFromDirectory(string projectDirectory, [NotNullWhen(true)] out string? projectFilePath, [NotNullWhen(false)] out string? error)
17+
{
18+
projectFilePath = null;
19+
error = null;
20+
21+
DirectoryInfo? dir;
22+
try
23+
{
24+
dir = new DirectoryInfo(projectDirectory);
25+
}
26+
catch (ArgumentException)
27+
{
28+
dir = null;
29+
}
30+
31+
if (dir == null || !dir.Exists)
32+
{
33+
error = string.Format(FileBasedProgramsResources.CouldNotFindProjectOrDirectory, projectDirectory);
34+
return false;
35+
}
36+
37+
FileInfo[] files = dir.GetFiles("*proj");
38+
if (files.Length == 0)
39+
{
40+
error = string.Format(FileBasedProgramsResources.CouldNotFindAnyProjectInDirectory, projectDirectory);
41+
return false;
42+
}
43+
44+
if (files.Length > 1)
45+
{
46+
error = string.Format(FileBasedProgramsResources.MoreThanOneProjectInDirectory, projectDirectory);
47+
return false;
48+
}
49+
50+
projectFilePath = files.First().FullName;
51+
return true;
52+
}
53+
}

src/Cli/dotnet/Commands/Package/Add/PackageAddCommand.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public override int Execute()
3535
string projectFilePath;
3636
if (!File.Exists(fileOrDirectory))
3737
{
38-
projectFilePath = MsbuildProject.GetProjectFileFromDirectory(fileOrDirectory).FullName;
38+
projectFilePath = MsbuildProject.GetProjectFileFromDirectory(fileOrDirectory);
3939
}
4040
else
4141
{

src/Cli/dotnet/Commands/Package/Remove/PackageRemoveCommand.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public override int Execute()
3434
string projectFilePath;
3535
if (!File.Exists(fileOrDirectory))
3636
{
37-
projectFilePath = MsbuildProject.GetProjectFileFromDirectory(fileOrDirectory).FullName;
37+
projectFilePath = MsbuildProject.GetProjectFileFromDirectory(fileOrDirectory);
3838
}
3939
else
4040
{

src/Cli/dotnet/Commands/Project/Convert/ProjectConvertCommand.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,7 @@ public override int Execute()
3232

3333
// Find directives (this can fail, so do this before creating the target directory).
3434
var sourceFile = SourceFile.Load(file);
35-
var diagnostics = DiagnosticBag.ThrowOnFirst();
36-
var directives = FileLevelDirectiveHelpers.FindDirectives(sourceFile, reportAllErrors: !_force, diagnostics);
35+
var directives = FileLevelDirectiveHelpers.FindDirectives(sourceFile, reportAllErrors: !_force, VirtualProjectBuildingCommand.ThrowingReporter);
3736

3837
// Create a project instance for evaluation.
3938
var projectCollection = new ProjectCollection();
@@ -46,7 +45,7 @@ public override int Execute()
4645
var projectInstance = command.CreateProjectInstance(projectCollection);
4746

4847
// Evaluate directives.
49-
directives = FileLevelDirectiveHelpers.EvaluateDirectives(projectInstance, directives, sourceFile, diagnostics);
48+
directives = VirtualProjectBuildingCommand.EvaluateDirectives(projectInstance, directives, sourceFile, VirtualProjectBuildingCommand.ThrowingReporter);
5049
command.Directives = directives;
5150
projectInstance = command.CreateProjectInstance(projectCollection);
5251

src/Cli/dotnet/Commands/Reference/Remove/ReferenceRemoveCommand.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public override int Execute()
4343

4444
return Path.GetRelativePath(
4545
msbuildProj.ProjectRootElement.FullPath,
46-
MsbuildProject.GetProjectFileFromDirectory(fullPath).FullName
46+
MsbuildProject.GetProjectFileFromDirectory(fullPath)
4747
);
4848
});
4949

0 commit comments

Comments
 (0)