Вызов неоднозначен между следующими методами или свойствами. ВЕБ-API ASP.NET

Я пытаюсь сделать REST API с помощью учебника на YouTube, но у меня есть следующая ошибка:

Ошибка CS0121 Неоднозначный вызов между следующими методами или характеристики: 'Application.Dependency.AddApplication(Microsoft.Extensions.DependencyInjection.IServiceCollection)' и 'Application.Dependency.AddApplication(Microsoft.Extensions.DependencyInjection.IServiceCollection)'

Я понимаю, что у меня 2 одинаковых метода и он не понимает, какой из них выбрать, но я не могу понять, почему возникает эта ошибка и как ее исправить.

Файл Application.Dependency.cs:

using Application.Services.Authentication; 
using Microsoft.Extensions.DependencyInjection;
    
    
namespace Application; 
public static class Dependency {
        public static IServiceCollection AddApplication(this IServiceCollection services)
        {
            services.AddScoped<IAuthenticationService, AuthenticationService>();
    
            return services;
        } 
}

Программа.cs:

using Infrastructure;
using Application;


var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
{
    builder.Services.AddApplication().AddInfrastructure();
    builder.Services.AddControllers();
}
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.Run();

Репозиторий кода

"но я не могу понять, почему возникает эта ошибка и как ее исправить" - предположительно это происходит из-за того, что у вас есть два одинаковых метода, и чтобы исправить это, вы должны избавиться от одного из них. В какой части руководства предлагалось использовать два одинаковых метода?

Jon Skeet 10.01.2023 16:29

Хм, я думаю, что видел похожую (если не такую ​​же) ошибку, вызванную ссылками на несколько версий одного и того же пакета nuget. Проверяйте каждый проект и на какие пакеты и версии ссылаются

phuzi 10.01.2023 16:30

@JonSkeet Да, но я не могу найти, где метод 2

SilverMoon17 10.01.2023 16:31

А, значит, когда вы говорите «Я понимаю, что у меня есть 2 одинаковых метода», вы имеете в виду, что на самом деле не знаете, где они находятся. Предположительно, вы можете найти один из них. Если вы переименуете его в «AddApplicationTemp», а затем вернетесь в Program.cs, поместите курсор в AddApplication, а затем нажмите F12 (перейти к члену), что произойдет?

Jon Skeet 10.01.2023 16:33

@JonSkeet Ошибка изменяется на Error CS1061 «IServiceCollection» не содержит определения для «AddApplication», и не может быть найден доступный метод расширения «AddApplication», принимающий первый аргумент типа «IServiceCollection» (вы пропустили директиву using или сборку ссылка?) когда я переименовываю свой метод, при нажатии F12 ничего не происходит, я пытаюсь использовать поиск визуальной студии в файлах, и у меня есть только 1 метод AddApplication()

SilverMoon17 10.01.2023 16:41

Интересный. Если вы измените код вызова на вызов .AddApplicationTemp(), вы снова получите две ошибки? Если это так, похоже, что код каким-то образом включается дважды. Пожалуйста, опубликуйте файл вашего проекта (в вопросе), так как он может иметь ответ.

Jon Skeet 10.01.2023 16:42

Нет, если я сделаю так, у меня будет та же ошибка. Вызов неоднозначен.

SilverMoon17 10.01.2023 16:43

@JonSkeet Я добавляю ссылку на репозиторий кода

SilverMoon17 10.01.2023 16:50
Конечные и Readonly классы в PHP
Конечные и Readonly классы в PHP
В прошлом, когда вы не хотели, чтобы другие классы расширяли определенный класс, вы могли пометить его как final.
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
БЭМ: Конвенция об именовании CSS
БЭМ: Конвенция об именовании CSS
Я часто вижу беспорядочный код CSS, особенно если проект большой. Кроме того, я совершал эту ошибку в профессиональных или личных проектах и...
Революционная веб-разработка ServiceNow
Революционная веб-разработка ServiceNow
В быстро развивающемся мире веб-разработки ServiceNow для достижения успеха крайне важно оставаться на вершине последних тенденций и технологий. По...
Как добавить SEO(Search Engine Optimization) в наше веб-приложение и как это работает?
Как добавить SEO(Search Engine Optimization) в наше веб-приложение и как это работает?
Заголовок веб-страницы играет наиболее важную роль в SEO, он помогает поисковой системе понять, о чем ваш сайт.
Конфигурация Jest в angular
Конфигурация Jest в angular
В этой статье я рассказываю обо всех необходимых шагах, которые нужно выполнить при настройке jest в angular.
1
8
92
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в том, как ваши проекты организованы в файловой системе.

У вас есть BublerProject.csproj в каталоге, который сам содержит все ваши другие проекты. Это означает, что все файлы C# компилируются в BublerProject и в других проектах, что и вызывает конфликт.

Вместо этого было бы лучше иметь такую ​​структуру каталогов:

- BublerSolution
  |
  +- BublerSolution.sln
  |
  +- BublerProject
     |
     +- BublerProject.csproj
     +- Program.cs (etc)
  |
  +- Application
     |
     +- Application.csproj
     +- Dependency.cs
  +- ... (other projects)

Другими словами, ваш каталог верхнего уровня содержит только файл решения и подкаталог для каждого проекта. Таким образом, вы никогда не вложите один проект в другой.

К сожалению, Visual Studio может легко создать проект и решение рядом друг с другом, что приводит к такой ситуации. Если вы всегда начинаете с нового решения, а затем добавляете к нему проекты (вместо того, чтобы начинать с нового проекта и сохранять из него решение), то обычно этого можно избежать.

Другие вопросы по теме