如何强制Swashbuckle.Aspnetcore.Cli使用netcoreapp3.1?

问题描述 投票:0回答:3

我正在将一个项目从 2.2 升级为使用 .Net Core 3.1,并且正在努力让我的工具正常工作。

我的 .csproj 文件中有此部分,它在发布时生成一个 swagger.json 文件 - 它在我们的构建管道中执行并作为工件发布。

<ItemGroup>
  <DotNetCliToolReference Include="Swashbuckle.AspNetCore.Cli" Version="5.2.1" />
</ItemGroup>
<Target Name="Swagger" AfterTargets="PrepareForPublish" DependsOnTargets="Build" Outputs="$(PublishDir)swagger.json">
  <Exec Command="dotnet swagger tofile --output $(PublishDir)swagger.json $(OutputPath)\$(AssemblyName).dll v1" />
</Target>

但是我遇到了这些错误:

Package Swashbuckle.AspNetCore.Cli 5.2.1 is not compatible with netcoreapp2.2 (.NETCoreApp,Version=v2.2). Package Swashbuckle.AspNetCore.Cli 5.2.1 supports:
- netcoreapp2.1 (.NETCoreApp,Version=v2.1) / any
- netcoreapp3.0 (.NETCoreApp,Version=v3.0) / any

和:

Invalid project-package combination for Swashbuckle.AspNetCore.Cli 5.2.1. DotnetToolReference project style can only contain references of the DotnetTool type

奇怪的是,我的项目使用的是 3.1 - 我在“netcoreapp2.2”和“2.2”上执行了 ctrl+f,但找不到指定的任何地方。如何强制我的 CLI 工具使用正确的 .NET Core 版本?

.net-core swagger csproj
3个回答
2
投票

我遇到了同样的问题,并按照此处描述的安装步骤解决了该问题:https://github.com/domaindrivendev/Swashbuckle.AspNetCore#retrieve-swagger-directly-from-a-startup- assembly,并通过删除项目文件的 ItemGroup:

<ItemGroup>
  <DotNetCliToolReference Include="Swashbuckle.AspNetCore.Cli" Version="5.2.1" />
</ItemGroup>

1
投票

我在尝试使用

dotnet swagger
时遇到了同样的问题。我改用仅使用
swagger
并解决了问题。正如 @Mike 所说,从项目文件中删除 ItemGroup 并按照此处所述全局安装 cli:https://github.com/domaindrivendev/Swashbuckle.AspNetCore#retrieve-swagger-directly-from-a-startup-assemble


0
投票

我遇到了同样的问题,尽管我一直在尝试使用.Net 8和Cli版本6.7.0。使用 MichaelBo 的回答,再加上 Paulo Morgado 的评论,为我解决了这个问题。结果步骤是:

  1. 在项目根文件夹中打开终端。
  2. 运行
    dotnet new tool-manifest
    。这将在您的项目下创建 .config/dotnet-tools.json 文件(请注意,该文件夹可能隐藏在某些 IDE 中,至少在 Rider 中)。
  3. 运行
    dotnet tool install Swashbuckle.AspNetCore.Cli --version major.minor.patch
    (将major.minor.patch替换为您想要的版本)。

最终的 .config/dotnet-tools.json 文件应类似于:

{
  "version": 1,
  "isRoot": true,
  "tools": {
    "swashbuckle.aspnetcore.cli": {
      "version": "major.minor.patch",
      "commands": [
        "swagger"
      ]
    }
  }
}

然后,我可以通过在我的项目文件中进行如下设置来运行该命令:

<Target Name="PostBuild" AfterTargets="PostBuildEvent">
    <Exec Command="dotnet swagger tofile --output swagger.json $(TargetDir)\MyProject.dll v1" EnvironmentVariables="ASPNETCORE_ENVIRONMENT=Development" />
</Target>

(请注意,命令路径和环境变量是我的案例所需的,与原始问题或您可能需要的不同)

© www.soinside.com 2019 - 2024. All rights reserved.