azure-functions-openapi-extension
azure-functions-openapi-extension copied to clipboard
Missing dependencies in *.deps.json leads to Object reference not set to an instance of an object
I receive an object reference
error if my function app references a project that has no dependencies.
To reproduce
-
git clone https://github.com/justinyoo/azfunc-openapi-dotnet.git
-
cd azfunc-openapi-dotnet
-
dotnet new classlib -o domain
-
cd Net60.FunctionApp.OutOfProc.Static
-
dotnet add reference .\..\domain
-
dotnet add package Microsoft.Azure.Functions.Worker
-
dotnet add package Microsoft.Azure.Functions.Worker.Sdk
-
dotnet add package Microsoft.Azure.Functions.Worker.Extensions.Http
-
dotnet add package Microsoft.Azure.Functions.Worker.Extensions.OpenApi --prerelease
-
dotnet build
(you will need to fix some missing reference errors) -
func start
- go to http://localhost:7071/api/swagger/ui
Error
Object reference not set to an instance of an object.
at Microsoft.Azure.Functions.Worker.Extensions.OpenApi.OpenApiHttpTriggerContext.<>c.<GetRuntimeFilenameAsync>b__42_1(KeyValuePair`2 target)
at System.Linq.Utilities.<>c__DisplayClass2_0`3.<CombineSelectors>b__0(TSource x)
at System.Linq.Enumerable.SelectListIterator`2.MoveNext()
at System.Linq.Enumerable.TryGetFirst[TSource](IEnumerable`1 source, Func`2 predicate, Boolean& found)
at Microsoft.Azure.Functions.Worker.Extensions.OpenApi.OpenApiHttpTriggerContext.GetRuntimeFilenameAsync(String functionAppDirectory)
at Microsoft.Azure.Functions.Worker.Extensions.OpenApi.OpenApiHttpTriggerContext.SetApplicationAssemblyAsync(String functionAppDirectory, Boolean appendBin)
at Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Extensions.OpenApiHttpTriggerContextExtensions.AuthorizeAsync(Task`1 context, IHttpRequestDataObject req)
at Microsoft.Azure.Functions.Worker.Extensions.OpenApi.Functions.OpenApiTriggerFunction.RenderSwaggerUI(HttpRequestData req, FunctionContext ctx)
Environment
- started from this repo https://github.com/justinyoo/azfunc-openapi-dotnet.git
- Microsoft.Azure.Functions.Worker.Extensions.OpenApi: 0.9.0-preview
Additional context
It seems to be related with #172 and fails if referenced project has no dependency in the *.deps.json
file
I can confirm this issue. Suddenly ran into this issue too this week. Dependencies was always an empty list before and now it can be null. Maybe something has changed in .NET, Functions or Newtonsoft Json causing this issue. Anyhow, we should do a null-check on the .Dependencies to avoid this.
Quickfix I used for now, is to reference a random small NuGet project in the libraries that do not have any dependency.
Using the in-process model, this happens to me only when deployed to Azure.
I can also confirm and reproduce, using in-process model, .Net Core 3.1 Function. Referencing a project without dependencies causes this, and disappears when adding any NuGet as suggested by @vincentbitter solves it for the moment. :) Thanks for sharing your quick fix!
For the sake of adding more context to the issue: For me this popped up when upgrading from netcoreapp3.1
/ v3
/ In-process
to net6.0
/ v4
/ In-Process
but only after the function app was deployed to Azure (locally was working just fine). Similar as described with the above there is a reference to a project without dependencies.
To be explicit before starting the upgrade (netcoreapp3.1
/ v3
/ In-process
) the OpenApi endpoints were working fine both locally and on Azure.
Update: What also is missing from earlier comments is this only impacts the SwaggerUI page https://example.org/api/swagger/ui
but the json
(/api/swagger.json
) and yaml
(/api/swagger.yaml
) routes are working.
The suggested approach to reference some NuGet package without deps isn't an option in our case as the referenced project is a private NuGet package use by multiple projects.