如何使用 ASP.NET Core 2.2 和 Swashbuckle.AspNetCore 5.4.1 针对 .NET Framework 4.8 生成 Swagger 文件

How generate Swagger file with ASP.NET Core 2.2 and Swashbuckle.AspNetCore 5.4.1 targeting .NET Framework 4.8

  1. 创建一个新的 ASP.NET 以 .NET Framework 4.8 为目标的 Core 2.2 项目
  2. 跟随'Getting Started'添加Swashbuckle.AspNetCore

这给了这个存储库: https://github.com/Orwel/GenerateSwaggerFileWithDotnetFramewrok

  1. 建造
  2. 进入文件夹 'bin/net48'
  3. 执行命令: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.

如何使用 ASP.NET Core 2.2 和 Swashbuckle.AspNetCore 5.4.1 针对 .NET Framework 4.8 生成 Swagger 文件?

我没有设法从 API 外部的程序生成 swagger 文件。

我修改了生成 swagger.json 文件的 api :

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 项目。