Ich verwende die netstandard2.1
Bibliothek in meiner netcoreapp3.0
Webanwendung. Beim Hinzufügen meines Dienstes wird Startup
folgende Fehlermeldung angezeigt:
'Typ' Microsoft.AspNetCore.Mvc.MvcJsonOptions 'konnte nicht aus Assembly' Microsoft.AspNetCore.Mvc.Formatters.Json, Version = 3.0.0.0 geladen werden
Ich verwende auch einige Funktionen aus dem Microsoft.AspNetCore.Mvc
2.2.0-Paket in meiner Klassenbibliothek.
Hier ist meine Bibliothek .csproj
,
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
</ItemGroup>
</Project>
Hier ist meine ServiceExtensions
Klasse aus meiner Bibliothek,
public static class ServiceExtensions
{
public static IMvcBuilder AddMyLibrary(this IMvcBuilder builder)
{
builder.Services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
builder.AddJsonOptions(options =>
{
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
});
builder.Services.ConfigureOptions<ConfigureLibraryOptions>();
return builder;
}
}
Hier ist meine ConfigureLibraryOptions
Klasse,
public class ConfigureLibraryOptions : IConfigureOptions<MvcOptions>
{
public void Configure(MvcOptions options)
{
options.ModelBinderProviders.Insert(0, new CustomBinderProvider());
}
}
Hier ist das ConfigureServices
von Startup
,
services.AddControllersWithViews().AddMyLibrary();
Bitte helfen Sie, warum ich diesen Fehler erhalte, und helfen Sie bei der Lösung dieses Fehlers.
netstandard2.1
Klassenbibliothek mit Bezug aufMicrosoft.AspNetCore.Mvc
2.2.0 in verwenden kannnetcoreapp3.0
. Stattdessen sollte ich dasnetstandard2.1
to ändernnetcoreapp3.0
und einFrameworkReference
to hinzufügenMicrosoft.AspNetCore.App
?Ich bin nicht sicher, ob dies das Problem von OP löst, aber dieser Fehler tritt auch auf, wenn Sie Swashbuckle 4 in .Net Core 3 verwenden. Die Lösung besteht darin, Swashbuckle 5 zu verwenden
Dann müssen Sie es in Startup.cs aktualisieren. Im Allgemeinen umfasst dies das Präfixieren von Klassen, die nicht mit
OpenApi
zoptions.SwaggerDoc("v1" new Info ...
wird
options.SwaggerDoc("v1", OpenApiInfo
auch
OpenApiSecurityScheme
wirdApiKeyScheme
Siehe auch Dokumente unter https://github.com/domaindrivendev/Swashbuckle.AspNetCore
quelle
Version
für das ObjektOpenApiInfo
gibt an, dass es definiert werden muss. Wenn ich die Definition überspringe, funktioniert alles, außer dass nicht zwei spezielle Etiketten neben dem Namen meiner Anwendung in der von der Prahlerei generierten Benutzeroberfläche gedruckt werden (eine enthält die Version, die wir weggelassen haben, die andereOAS3
. Was bedeutet das?). Warum ist es erforderlich und was bedeuten wir damit? In den von Ihnen verknüpften Dokumenten ist es definiert alsv1
. Sollte es so bleiben oder ist das nur ein Beispiel - wir sollten stattdessen lieber die Version unserer Anwendung dort speichern . Es kann alles sein, wie0.0.1a-ffg
netstandard2.1 bis netcoreapp3.0 MvcJsonOptions -> MvcNewtonsoftJsonOptions
quelle