-
Notifications
You must be signed in to change notification settings - Fork 879
Open
Labels
dotnetGenerate .NET API reference docsGenerate .NET API reference docs
Description
Describe the bug
When running docfx docfx.json --serve on a project containing a generic extension method with allows ref struct, DocFX throws a NullReferenceException.
To Reproduce
- Create .NET 9 project, paste this code:
namespace MyNamespace;
public static class TestClass
{
public ref struct TestStruct;
public static byte TestMethod<TRefStruct>(this TRefStruct value) where TRefStruct : allows ref struct => 1;
}- Initialize docfx with
docfx init - Run
docfx docfx.json --serve
(or use this C# project as playground)
Playground.zip
Expected behavior
Generated API.
Context (please complete the following information):
-
OS: Windows 11
-
Docfx version: 2.78.3
-
.NET version: .NET 9.0
-
docfx.jsonconfig
{
"$schema": "https://raw.githubusercontent.com/dotnet/docfx/main/schemas/docfx.schema.json",
"metadata": [
{
"src": [
{
"src": "../",
"files": [
"**/*.csproj"
]
}
],
"dest": "api"
}
],
"build": {
"content": [
{
"files": [
"**/*.{md,yml}"
],
"exclude": [
"_site/**"
]
}
],
"resource": [
{
"files": [
"images/**"
]
}
],
"output": "_site",
"template": [
"default",
"modern"
],
"globalMetadata": {
"_appName": "mysite",
"_appTitle": "mysite",
"_enableSearch": true,
"pdf": true
}
}
}- Exceptions
NullReferenceException: Object reference not set to an instance of an object.
at bool CheckBasicConstraints(Symbol containingSymbol, in CheckConstraintsArgs args, TypeParameterSymbol typeParameter, TypeWithAnnotations typeArgument, ArrayBuilder<TypeParameterDiagnosticInfo> diagnosticsBuilder, ArrayBuilder<TypeParameterDiagnosticInfo> nullabilityDiagnosticsBuilderOpt, ref
ArrayBuilder<TypeParameterDiagnosticInfo> useSiteDiagnosticsBuilder)
at bool CheckConstraints(Symbol containingSymbol, in CheckConstraintsArgs args, TypeMap substitution, TypeParameterSymbol typeParameter, TypeWithAnnotations typeArgument, ArrayBuilder<TypeParameterDiagnosticInfo> diagnosticsBuilder, ArrayBuilder<TypeParameterDiagnosticInfo> nullabilityDiagnosticsBuilderOpt, ref
ArrayBuilder<TypeParameterDiagnosticInfo> useSiteDiagnosticsBuilder, HashSet<TypeParameterSymbol> ignoreTypeConstraintsDependentOnTypeParametersOpt)
at bool CheckConstraints(Symbol containingSymbol, in CheckConstraintsArgs args, TypeMap substitution, ImmutableArray<TypeParameterSymbol> typeParameters, ImmutableArray<TypeWithAnnotations> typeArguments, ArrayBuilder<TypeParameterDiagnosticInfo> diagnosticsBuilder, ArrayBuilder<TypeParameterDiagnosticInfo>
nullabilityDiagnosticsBuilderOpt, ref ArrayBuilder<TypeParameterDiagnosticInfo> useSiteDiagnosticsBuilder, BitVector skipParameters, HashSet<TypeParameterSymbol> ignoreTypeConstraintsDependentOnTypeParametersOpt)
at MethodSymbol InferExtensionMethodTypeArguments(MethodSymbol method, TypeSymbol thisType, CSharpCompilation compilation, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out bool wasFullyInferred)
at MethodSymbol Create(MethodSymbol method, TypeSymbol receiverType, CSharpCompilation compilation, out bool wasFullyInferred)
at MethodSymbol ReduceExtensionMethod(TypeSymbol receiverType, CSharpCompilation compilation, out bool wasFullyInferred)
at MethodSymbol ReduceExtensionMethod(TypeSymbol receiverType, CSharpCompilation compilation)
at IMethodSymbol ReduceExtensionMethod(ITypeSymbol receiverType)
at void GenerateExtensionMethods(INamedTypeSymbol symbol, MetadataItem item) in SymbolVisitorAdapter.cs:640
at MetadataItem VisitNamedType(INamedTypeSymbol symbol) in SymbolVisitorAdapter.cs:153
at TResult Accept<TResult>(SymbolVisitor<TResult> visitor)
at TResult Accept<TResult>(SymbolVisitor<TResult> visitor)
at List<MetadataItem> VisitDescendants<T>(IEnumerable<T> children, Func<T, IEnumerable<T>> getChildren, Func<T, bool> filter) in SymbolVisitorAdapter.cs:512
at MetadataItem VisitNamespace(INamespaceSymbol symbol) in SymbolVisitorAdapter.cs:133
at TResult Accept<TResult>(SymbolVisitor<TResult> visitor)
at TResult Accept<TResult>(SymbolVisitor<TResult> visitor)
at List<MetadataItem> VisitDescendants<T>(IEnumerable<T> children, Func<T, IEnumerable<T>> getChildren, Func<T, bool> filter) in SymbolVisitorAdapter.cs:512
at MetadataItem VisitAssembly(IAssemblySymbol symbol) in SymbolVisitorAdapter.cs:117
at TResult Accept<TResult>(SymbolVisitor<TResult> visitor)
at TResult Accept<TResult>(SymbolVisitor<TResult> visitor)
at void CreateManagedReference((ValueTuple<IAssemblySymbol, Compilation> symbol) assemblies, ExtractMetadataConfig config, DotnetApiOptions options) in DotnetApiCatalog.ManagedReference.cs:25
at async Task <Exec>g__Build|6_0(ExtractMetadataConfig config, DotnetApiOptions options) in DotnetApiCatalog.cs:111
at async Task Exec(MetadataJsonConfig config, DotnetApiOptions options, string configDirectory, string outputDirectory) in DotnetApiCatalog.cs:71
at void <Execute>b__0() in DefaultCommand.cs:45
at int Run(LogOptions options, Action run) in CommandHelper.cs:48
at int Execute(CommandContext context, Options options, CancellationToken cancellationToken) in DefaultCommand.cs:31
at int Execute(CommandContext context, TSettings settings) in CancellableCommandBase.cs:24
at Task<int> Execute(CommandContext context, CommandSettings settings) in CommandOfT.cs:40
at async Task<int> Execute(CommandTree leaf, CommandTree tree, CommandContext context, ITypeResolver resolver, IConfiguration configuration) in CommandExecutor.cs:166- .NET info
.NET SDK:
Version: 9.0.300-preview.0.25177.5
Commit: 3d5b396331
Workload version: 9.0.300-manifests.1e5233e8
MSBuild version: 17.14.0-preview-25175-08+5880e1c75
Runtime Environment:
OS Name: Windows
OS Version: 10.0.22631
OS Platform: Windows
RID: win-x64
Base Path: C:\Program Files\dotnet\sdk\9.0.300-preview.0.25177.5\
.NET workloads installed:
[tvos]
Installation Source: VS 17.14.36017.23
Manifest Version: 18.4.9288/9.0.100
Manifest Path: C:\Program Files\dotnet\sdk-manifests\9.0.100\microsoft.net.sdk.tvos\18.4.9288\WorkloadManifest.json
Install Type: Msi
[macos]
Installation Source: VS 17.14.36017.23
Manifest Version: 15.4.9288/9.0.100
Manifest Path: C:\Program Files\dotnet\sdk-manifests\9.0.100\microsoft.net.sdk.macos\15.4.9288\WorkloadManifest.json
Install Type: Msi
[android]
Installation Source: VS 17.14.36017.23
Manifest Version: 35.0.61/9.0.100
Manifest Path: C:\Program Files\dotnet\sdk-manifests\9.0.100\microsoft.net.sdk.android\35.0.61\WorkloadManifest.json
Install Type: Msi
[wasm-tools]
Installation Source: VS 17.14.36017.23
Manifest Version: 9.0.4/9.0.100
Manifest Path: C:\Program Files\dotnet\sdk-manifests\9.0.100\microsoft.net.workload.mono.toolchain.current\9.0.4\WorkloadManifest.json
Install Type: Msi
[aspire]
Installation Source: VS 17.14.36017.23
Manifest Version: 8.2.2/8.0.100
Manifest Path: C:\Program Files\dotnet\sdk-manifests\8.0.100\microsoft.net.sdk.aspire\8.2.2\WorkloadManifest.json
Install Type: Msi
[maui-windows]
Installation Source: VS 17.14.36017.23
Manifest Version: 9.0.14/9.0.100
Manifest Path: C:\Program Files\dotnet\sdk-manifests\9.0.100\microsoft.net.sdk.maui\9.0.14\WorkloadManifest.json
Install Type: Msi
[maccatalyst]
Installation Source: VS 17.14.36017.23
Manifest Version: 18.4.9288/9.0.100
Manifest Path: C:\Program Files\dotnet\sdk-manifests\9.0.100\microsoft.net.sdk.maccatalyst\18.4.9288\WorkloadManifest.json
Install Type: Msi
[ios]
Installation Source: VS 17.14.36017.23
Manifest Version: 18.4.9288/9.0.100
Manifest Path: C:\Program Files\dotnet\sdk-manifests\9.0.100\microsoft.net.sdk.ios\18.4.9288\WorkloadManifest.json
Install Type: Msi
Configured to use loose manifests when installing new manifests.
Host:
Version: 9.0.4
Architecture: x64
Commit: f57e6dc747
.NET SDKs installed:
9.0.105 [C:\Program Files\dotnet\sdk]
9.0.203 [C:\Program Files\dotnet\sdk]
9.0.300-preview.0.25177.5 [C:\Program Files\dotnet\sdk]
.NET runtimes installed:
Microsoft.AspNetCore.App 8.0.14 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 9.0.3 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 9.0.4 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.NETCore.App 8.0.14 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 8.0.15 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 9.0.3 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 9.0.4 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.WindowsDesktop.App 8.0.14 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 8.0.15 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 9.0.3 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 9.0.4 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Other architectures found:
x86 [C:\Program Files (x86)\dotnet]
registered at [HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x86\InstallLocation]
Environment variables:
Not set
global.json file:
Not found
Learn more:
https://aka.ms/dotnet/info
Download .NET:
https://aka.ms/dotnet/downloadCopilot
Metadata
Metadata
Assignees
Labels
dotnetGenerate .NET API reference docsGenerate .NET API reference docs