Как сгенерировать файл Swagger с помощью ASP.NET Core 2.2 и Swashbuckle.AspNetCore 5.4.1 для .NET Framework 4.8
- Создайте новый проект ASP.NET Core 2.2, предназначенный для.NET Framework 4.8.
- Следуйте инструкциям по началу работы, чтобы добавить Swashbuckle.AspNetCore.
Это дает этот репозиторий:https://github.com/Orwel/GenerateSwaggerFileWithDotnetFramewrok
- Построить
- Заходим в папку bin/net48
- Выполните команду:
swagger tofile WebApplication1.exe v1
Это отображает ошибку:
A JSON parsing exception occurred in [.\WebApplication1\bin\Debug\net48\WebApplication1.exe]: * Line 1, Column 2 Syntax error: Malformed token
A fatal error was encountered. The library 'hostpolicy.dll' required to execute the application was not found in '.\WebApplication1\bin\Debug\net48\'.
Failed to run as a self-contained app. If this should be a framework-dependent app, add the .\bin\Debug\net48\WebApplication1.json file specifying the appropriate framework.
Эта ошибка обычно возникает, когда приложение.NET Core загружает DLL, предназначенную для другой среды выполнения. Возможно, Swashbuckle.AspNetCore.Cli нельзя использовать с.NET Framework API.
Как сгенерировать файл Swagger с помощью ASP.NET Core 2.2 и Swashbuckle.AspNetCore 5.4.1, ориентированного на.NET Framework 4.8?
1 ответ
Решение
Мне не удалось сгенерировать файл swagger из программы, внешней по отношению к API.
Я изменил api, который генерирует swagger.json
файл:
public static class Program
{
public static void Main(string[] args)
{
var webHost = CreateWebHostBuilder(args).Build();
if (args.Length == 1 && args[0] == "generate")
{
var json = webHost.GenerateSwagger("v1", null);
File.WriteAllText("swagger.json", json);
}
else
{
webHost.Run();
}
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
public static string GenerateSwagger(this IWebHost webhost, string docName, string basePath)
{
var sw = webhost.Services.GetRequiredService<ISwaggerProvider>();
var doc = sw.GetSwagger(docName, null, basePath);
using (var streamWriter = new StringWriter())
{
var writer = new OpenApiJsonWriter(streamWriter);
doc.SerializeAsV3(writer);
return streamWriter.ToString();
}
}
}
Я приму ответ сформирую swagger.json
без ссылки на проект api.