Skip to content

Commit

Permalink
fix: Resolved .NET SDK version problem on source-based API metadata g…
Browse files Browse the repository at this point in the history
…eneration (dotnet#9713)

* fix: resolved .NET SDK version on source-based API metadata generation

* chore: fix failed unit tests when running net6/net7
  • Loading branch information
filzrev authored and p-kostov committed Jun 28, 2024
1 parent 1258e5f commit 8ca900e
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 3 deletions.
8 changes: 6 additions & 2 deletions src/Docfx.Dotnet/CompilationHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -136,10 +136,14 @@ private static IEnumerable<MetadataReference> GetDefaultMetadataReferences(strin
{
try
{
// Get current .NET runtime version with `{major}.{minor}` format.
var dotnetMajorMinorVersion = Environment.Version.ToString(2);

// Resolve .NET SDK packs directory path. (e.g. `C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.2\ref\net8.0`)
var dotnetExeDirectory = DotNetCorePathFinder.FindDotNetExeDirectory();
var refDirectory = Path.Combine(dotnetExeDirectory, "packs/Microsoft.NETCore.App.Ref");
var version = new DirectoryInfo(refDirectory).GetDirectories().Select(d => d.Name).Max()!;
var moniker = new DirectoryInfo(Path.Combine(refDirectory, version, "ref")).GetDirectories().Select(d => d.Name).Max()!;
var version = new DirectoryInfo(refDirectory).GetDirectories().Select(d => d.Name).Where(x => x.StartsWith(dotnetMajorMinorVersion)).Max()!;
var moniker = new DirectoryInfo(Path.Combine(refDirectory, version, "ref")).GetDirectories().Select(d => d.Name).Where(x => x.EndsWith(dotnetMajorMinorVersion)).Max()!;
var path = Path.Combine(refDirectory, version, "ref", moniker);

Logger.LogInfo($"Compiling {language} files using .NET SDK {version} for {moniker}");
Expand Down
11 changes: 10 additions & 1 deletion test/Docfx.Dotnet.Tests/GenerateMetadataFromCSUnitTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2580,7 +2580,12 @@ public void Undefined(ConsoleKey key = ConsoleKey.None) { }

var undefined = output.Items[0].Items[0].Items[1];
Assert.NotNull(undefined);

#if NET8_0_OR_GREATER
Assert.Equal(@"public void Undefined(ConsoleKey key = ConsoleKey.None)", undefined.Syntax.Content[SyntaxLanguage.CSharp]);
#else
Assert.Equal(@"public void Undefined(ConsoleKey key = default)", undefined.Syntax.Content[SyntaxLanguage.CSharp]);
#endif
}

[Fact]
Expand Down Expand Up @@ -2648,8 +2653,12 @@ public void EnumUndefinedValue(ConsoleKey? key = (ConsoleKey)999) { }

var enumUndefinedDefault = output.Items[0].Items[0].Items[3];
Assert.NotNull(enumUndefinedDefault);
Assert.Equal(@"public void EnumUndefinedDefault(ConsoleKey? key = ConsoleKey.None)", enumUndefinedDefault.Syntax.Content[SyntaxLanguage.CSharp]);

#if NET8_0_OR_GREATER
Assert.Equal(@"public void EnumUndefinedDefault(ConsoleKey? key = ConsoleKey.None)", enumUndefinedDefault.Syntax.Content[SyntaxLanguage.CSharp]);
#else
Assert.Equal(@"public void EnumUndefinedDefault(ConsoleKey? key = null)", enumUndefinedDefault.Syntax.Content[SyntaxLanguage.CSharp]);
#endif
var enumUndefinedValue = output.Items[0].Items[0].Items[4];
Assert.NotNull(enumUndefinedValue);
Assert.Equal(@"public void EnumUndefinedValue(ConsoleKey? key = (ConsoleKey)999)", enumUndefinedValue.Syntax.Content[SyntaxLanguage.CSharp]);
Expand Down

0 comments on commit 8ca900e

Please sign in to comment.