Visual Studio 2017 не работает режим отладки

226
10 марта 2019, 13:20

Проблема в следующем. При запуске проекта через

IIS работает

если запускаешь проект через режим отладки то результат такой

И если ты пытаешься зарегиться или войти выдаёт

Не могу понять почему??? вот файл Program.cs

public class Program
    {
        public static void Main(string[] args)
        {
            BuildWebHost(args).Run();
        }
        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .Build();
    }

Вот appsiting.json

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=.\\SQLEXPRESS;Database=aspLaboratory56;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  }
}

Вот Startup

public IConfiguration Configuration { get; }
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<ApplicationDbContext>(options =>
                options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

В чём может быть причина? В режиме IIS всё работает!

Вот launchSettings.json

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:58730/",
      "sslPort": 44388
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "https://localhost:44388/",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "Laboratory56": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "http://localhost:58731/"
    }
  }
}

Вспомнил ещё одну вещь. Когда не помню, но начал ругаться на ILogger Нашёл решение

// если выдаёт вот такое
        // (InvalidOperationException: Unable to resolve service for type'Microsoft.Extensions.Logging.ILogger' while attempting to activate 'Laboratory56.Controllers.AccountController'.) 
        // Нужно сделать так, вместо ILogger logger сделать ILoggerFactory logger
        // а вместо  _logger = logger; сделать так  _logger = logger.CreateLogger("My logger");

До конца не понял почему но это работает. Может прольёт свет!

Вот проект. Может так понятней будет. git clone https://EugeneTM@bitbucket.org/EugeneTM/laba.git

Answer 1

У вас немного сбивающий с толку заголовок. Очевидно же, что приложение у вас работает, отладка работает, просто вы в рантайме получаете исключение

InvalidOperationException: Unable to resolve service for type'Microsoft.Extensions.Logging.ILogger' while attempting to activate 'Laboratory56.Controllers.AccountController'.

Исключение вызвано тем, что вы пытаетесь получить нетипизированный логгер, а стандартная система логгирования регистрирует в DI только типизированный, ILogger

Т.е у вас сейчас конструктор AccountController выглядит примерно так:

public AccountController(
    UserManager<ApplicationUser> userManager,
    SignInManager<ApplicationUser> signInManager,
    IEmailSender emailSender,
    ILogger logger)
{
    _userManager = userManager;
    _signInManager = signInManager;
    _emailSender = emailSender;
    _logger = logger;
}

А должен выглядеть вот так (как в шаблоне .NET Core 2.0):

public AccountController(
    UserManager<ApplicationUser> userManager,
    SignInManager<ApplicationUser> signInManager,
    IEmailSender emailSender,
    ILogger<AccountController> logger) // <---------
{
    _userManager = userManager;
    _signInManager = signInManager;
    _emailSender = emailSender;
    _logger = logger;
}

В IIS у вас работает, потому что там вы уже залогинены, и ссылка ведет на другое действие.

READ ALSO
ajax и элементы с одинаковым классом

ajax и элементы с одинаковым классом

Есть несколько блоков с одинаковым классом, по тыку срабатывает функция, которая сравнивает текст блока с полем из таблицы в бд, и после выборки...

168
Всплывающее уведомление

Всплывающее уведомление

У меня есть кнопка, на которой вести функция: <div class="btn btn-v-1" style="margin-top:30px" type="text" onclick='SaveCountry();'>Upload</div> Как сделать, чтоб если функция отработала...

125
как сравнить текущую строку и ту, которая появляется на ее месте при ajax запросе

как сравнить текущую строку и ту, которая появляется на ее месте при ajax запросе

как сравнить текущую строку и ту, которая появляется на ее месте при ajax запросеВ частности я хочу реализовать такой механизм, который будет...

154
Что хранить в куки после авторизации

Что хранить в куки после авторизации

Какие данные записывать в куки после авторизации? Пароль, полагаю, хранить небезопасно, но какой идентификатор можно использовать, чтобы...

150