Вызов неоднозначен между следующими методами или свойствами. ВЕБ-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
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
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 может легко создать проект и решение рядом друг с другом, что приводит к такой ситуации. Если вы всегда начинаете с нового решения, а затем добавляете к нему проекты (вместо того, чтобы начинать с нового проекта и сохранять из него решение), то обычно этого можно избежать.

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