我正在将一个项目从 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 版本?
我遇到了同样的问题,并按照此处描述的安装步骤解决了该问题: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>
我在尝试使用
dotnet swagger
时遇到了同样的问题。我改用仅使用 swagger
并解决了问题。正如 @Mike 所说,从项目文件中删除 ItemGroup 并按照此处所述全局安装 cli:https://github.com/domaindrivendev/Swashbuckle.AspNetCore#retrieve-swagger-directly-from-a-startup-assemble
我遇到了同样的问题,尽管我一直在尝试使用.Net 8和Cli版本6.7.0。使用 MichaelBo 的回答,再加上 Paulo Morgado 的评论,为我解决了这个问题。结果步骤是:
dotnet new tool-manifest
。这将在您的项目下创建 .config/dotnet-tools.json 文件(请注意,该文件夹可能隐藏在某些 IDE 中,至少在 Rider 中)。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>
(请注意,命令路径和环境变量是我的案例所需的,与原始问题或您可能需要的不同)