2017-02-17 14 views
0

Я пытаюсь запустить IdentityServer4 в качестве консольного приложения. Но я не уверен, что я прав. Я создал Консольное приложение (.NET Core) вместо ASP.NET Core Web Application (.NET Core).IdentityServer 4 как консольное приложение

Моя установка WebHostBuilder довольно проста:

public class Program 
{ 
    public static void Main(string[] args) 
    { 
     var host = new WebHostBuilder() 
      .UseKestrel() 
      .UseStartup<Startup>() 
      .Build(); 

     host.Run(); 
    } 
} 

Также Запуск класс очень маленький:

public class Startup 
{ 
    public void ConfigureServices(IServiceCollection services) 
    { 
     services.AddIdentityServer() 
       .AddTemporarySigningCredential() 
       .AddInMemoryIdentityResources(Config.GetIdentityResources()) 
       .AddInMemoryApiResources(Config.GetApiResources()) 
       .AddInMemoryClients(Config.GetClients()) 
       .AddTestUsers(Config.GetUsers()); 
    } 

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
    { 
     loggerFactory.AddConsole(); 
     app.UseIdentityServer(); 
    } 
} 

Я просто обеспокоен, если я пропускаю некоторые части, которые могли бы приводят к проблемам позже. Я на правильном пути?

ответ

2

Вот шаги для создания Сервера идентификации v4 исполняемого файла с помощью .NET версии ядра 1.1.

Создать проект с помощью Консольное приложение (.NET Core). В методе Main реализовать следующий код:

public class Program 
{ 
    public static void Main(string[] args) 
    { 
     Console.Title = "IdentityServer"; 

     var host = new WebHostBuilder() 
      .UseKestrel() 
      .UseStartup<Startup>() 
      .Build(); 

     host.Run(); 
    } 
} 

В Startup классе реализовать следующий код:

public class Startup 
{ 
    public void ConfigureServices(IServiceCollection services) 
    { 
     // configure identity server with in-memory stores, keys, clients and scopes 
     services.AddIdentityServer() 
      .AddTemporarySigningCredential() 
      .AddInMemoryApiResources(Config.GetApiResources()) 
      .AddInMemoryClients(Config.GetClients()) 
      .AddTestUsers(Config.GetUsers()); 
    } 

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
    { 
     loggerFactory.AddConsole(LogLevel.Debug); 
     app.UseDeveloperExceptionPage(); 

     app.UseIdentityServer(); 
    } 
} 

Чтобы создать исполняемый файл, вы не должны в "type": "platform" в вашем project.json. Например мой project.json выглядит следующим образом:

{ 
    "dependencies": { 
    "IdentityServer4": "1.1.1", 
    "Microsoft.AspNetCore.Diagnostics": "1.1.0", 
    "Microsoft.AspNetCore.Hosting": "1.1.0", 
    "Microsoft.AspNetCore.Server.Kestrel": "1.1.0", 
    "Microsoft.Extensions.Logging.Console": "1.1.0", 
    "Microsoft.NETCore.App": { 
     "version": "1.1.0" 
    } 
    }, 

    "frameworks": { 
    "netcoreapp1.1": { 
    } 
    }, 

    "runtimes": { 
    "win7-x64": {}, 
    "win8-x64": {}, 
    "win10-x64": {} 
    } 
} 

Чем вы можете создать исполняемый файл с DotNet опубликовать команду, как показано ниже.

dotnet publish -c release -r win7-x64
dotnet publish -c release -r win8-x64
dotnet publish -c release -r win10-x64

Отказ от ответственности: Это минимальный ход версия, может быть, вы будете нуждаться в расширенной конфигурации, зависит от того, что вам нужно.

0

Каждое приложение .NET Core является консольным приложением. Поэтому не важно, какой шаблон вы используете.

Но я думаю, что в вашем главном - вам не нужен звонок UseContentRoot.

+0

Да, это правда, моя задача - запустить _IdentityServer_ как _ *. Exe_. Могу ли я сделать это с помощью шаблона _ASP.Net Core_? О, и спасибо за подсказку с 'UseContentRoot'. Каковы последствия этих настроек? –

+0

Когда вы нацеливаете полный фреймворк, вы получите exe - netcore всегда будет создавать dll, который вы можете запустить с помощью прогона dotnet. – leastprivilege