Я пытаюсь опубликовать C# API в azure, я выполнил все шаги в эта документация здесь, но по какой-то причине, когда я публикую приложение, сборка завершается успешно и вылетает при выполнении этой строки ниже
Generating swagger file to 'C:\Users\user\Projs\API\bin\Release\netcoreapp3.1\swagger.json'.
и единственный журнал ошибок, который печатается, это
Failed to generate swagger file. Error dotnet swagger tofile --serializeasv2 --output "C:\Users\user\Downloads\Projs\API\bin\Release\netcoreapp3.1\swagger.json" "C:\Users\user\Downloads\Projs\API\bin\Release\netcoreapp3.1\API.dll" v1
Unhandled exception. System.IO.FileLoadException: Could not load file or assembly 'System.Runtime, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The located assembly's manifest definition does not match the assembly reference. (0x80131040)
File name: 'System.Runtime, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
Be sure that the Startup.cs for your application is calling AddSwaggerGen from within ConfigureServices in order to generate swagger file. Visit https://go.microsoft.com/fwlink/?LinkId=2131205&CLCID=0x409 for more information.
Это мой startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddSwaggerGen(c =>
{
c.SwaggerDoc(
"v1",
new Microsoft.OpenApi.Models.OpenApiInfo { Title = "My API", Version = "v1" });
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthentication();
app.UseSwagger(c =>
{
c.SerializeAsV2 = true;
});
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("v1/swagger.json", "MyAPI V1");
});
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
Это мой файл .csproj
<Project Sdk = "Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<UseNETCoreGenerator>true</UseNETCoreGenerator>
<UserSecretsId>d844b2a8-00b0-473d-8f97-9dca9f2899bd</UserSecretsId>
</PropertyGroup>
<PropertyGroup Condition = "'$(TargetFramework)' == 'net45'">
<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
</PropertyGroup>
<ItemGroup>
<Folder Include = "Model\" />
<Folder Include = "Context\" />
<Folder Include = "Contracts\ServiceResponse\" />
</ItemGroup>
<ItemGroup>
<PackageReference Include = "Microsoft.AspNet.SignalR" Version = "2.4.1" />
<PackageReference Include = "Microsoft.AspNetCore.Authentication.JwtBearer" Version = "3.1.13" />
<PackageReference Include = "Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version = "3.1.13" />
<PackageReference Include = "Microsoft.EntityFrameworkCore" Version = "3.1.11" />
<PackageReference Include = "Microsoft.EntityFrameworkCore.Design" Version = "3.1.11">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include = "Microsoft.EntityFrameworkCore.Relational" Version = "3.1.11" />
<PackageReference Include = "Microsoft.EntityFrameworkCore.SqlServer" Version = "3.1.10" />
<PackageReference Include = "Microsoft.EntityFrameworkCore.SqlServer.Design" Version = "1.1.6" />
<PackageReference Include = "Microsoft.EntityFrameworkCore.Tools" Version = "3.1.11">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include = "Newtonsoft.Json" Version = "13.0.1" />
<PackageReference Include = "AutoMapper" Version = "10.1.1" />
<PackageReference Include = "Pomelo.EntityFrameworkCore.MySql" Version = "3.2.4" />
<PackageReference Include = "Swashbuckle.AspNetCore" Version = "5.0.0" />
<PackageReference Include = "System.IdentityModel.Tokens.Jwt" Version = "6.8.0" />
<PackageReference Include = "System.Runtime" Version = "4.3.1" />
</ItemGroup>
</Project>
Я пробовал решения по этим ссылкам, но ни одно из них не сработало.
https://github.com/Azure/azure-functions-vs-build-sdk/issues/160
Есть ли способ исправить это?
Обновлять:
Я попробовал решение, которое сказал пользователь в потоке, чтобы добавить перенаправления привязки, я добавил web.config
и app.config
и добавил привязки, но он по-прежнему не может опубликовать
Обновление 2: Я не смог найти решение, поэтому я установил .net 5.0, и он сработал
@Juanma Feliu, когда я перехожу к https://localhost:44342/swagger/v1/swagger.json
, он отлично показывает JSON
Ваша версия Newtonsoft.Json тоже может быть испорчена, поскольку Pomelo использует более раннюю версию, чем 13.0.1. Можете ли вы отредактировать свой .csproj и удалить ссылку на пакет System.Runtime?
@Juanma Feilu Я удалил System.Runtime и также удалил Newtonsoft.Json, потому что я его не использую. Но я все равно получаю ту же ошибку
пожалуйста, добавьте скриншот пакета nuget из вашего проекта.
@JuanmaFeliu Скриншот добавил!
Поскольку ваш проект нацелен на netcoreapp3.1, попробуйте использовать все пакеты Nuget фреймворка версии 3. *. * Вместо 5. *. *.
@Prasath все находится на 3. *. * За исключением чванства, потому что, когда я понижаю его, он не принимает его как api
Вы видите свою конечную точку чванства? Кажется, это связано с вашей версией SwashBuckle.AspnetCore, но не может ее подтвердить, возможно, вам может помочь более ранняя версия nuget.