2016-07-09 50 views
21

Quindi finalmente ho avuto l'opportunità di guardare Core e sono caduto al primo ostacolo. Sto seguendo il corso di base di ASP.NET di Pluralsight e ricevo un'eccezione quando provo a aggiungere il file appsettings.json al builder di configurazione.ASP.NET Core 1.0 ConfigurationBuilder(). AddJsonFile ("appsettings.json"); non trovando il file

public Startup() 
{ 
    var builder = new ConfigurationBuilder() 
     .AddJsonFile("appsettings.json"); 

    Configuration = builder.Build(); 
} 

L'errore che sto ottenendo è il file di configurazione 'appsettings.json' non è stato trovato e non è opzionale. Ma ho creato direttamente sotto la mia soluzione proprio come nel video del corso.

Qualche suggerimento?

Cheers,

risposta

19
public Startup(IHostingEnvironment env) 
{ 
    var builder = new ConfigurationBuilder() 
     .SetBasePath(env.ContentRootPath) 
     .AddJsonFile("appsettings.json"); 

    Configuration = builder.Build(); 
} 

questo sembra fare il trucco. Tuttavia, non sono sicuro che questo sia il modo corretto per farlo. Si sente come un hack.

+3

ero in grado di farlo funzionare usando .SetBasePath (Directory.GetCurrentDirectory()), come mostrato qui: http://benfoster.io/blog/how-to-configure-kestrel-urls-in-aspnet-core-rc2 – Sako73

+1

Bene, se si tratta di un hack, è un trucco che Microsoft fa da solo quando si imposta una nuova applicazione Web ASP.NET vuota. – David

9

Una soluzione alternativa che ho trovato da questo blog post funziona pure. Ha il vantaggio aggiuntivo di non aver bisogno di modificare la firma del metodo di avvio del file Startup.cs.

Nella sezione buildOptions aggiungere copyToOutput con il nome del file.

{ 
    "version": "1.0.0-*", 
    "buildOptions": { 
    "emitEntryPoint": true, 
    "copyToOutput": "appsettings.json" 
    }, 
    .... The rest of the file goes here .... 
16

è necessario aggiungere il pacchetto di seguito:

"Microsoft.Extensions.Configuration.Json": "1.0.0" 
+0

Questo era quello che mi mancava. Grazie! – JedatKinports

11

Un altro modo:

appsettings.json:

{ 
    "greeting": "A configurable hello, to you!" 
} 

Startup.cs:

using Microsoft.Extensions.Configuration; // for using IConfiguration 
using System.IO; // for using Directory 

public class Startup 
{ 
    public IConfiguration Configuration { get; set; } 

    public Startup() 
    { 
     var builder = new ConfigurationBuilder(); 
     builder.SetBasePath(Directory.GetCurrentDirectory()); 
     builder.AddJsonFile("appsettings.json"); 

     Configuration = builder.Build(); 
    }  
} 

Nel metodo Configure:

app.Run(async (context) => 
{ 
    // Don't use: 
    // string greeting = Configuration["greeting"]; // null 

    string greeting = Configuration.GetSection("greeting").Value; 
    await context.Response.WriteAsync(greeting) 
}); 
6

In realtà per questo è necessario fornire fornire percorso principale dalla variabile di ambiente, quindi è necessario passare IHostingEnvironment di riferimento per fornire percorso principale:

public Startup(IHostingEnvironment env) 
{ 
    var builder = new ConfigurationBuilder() 
          .SetBasePath(env.ContentRootPath) 
          .AddJsonFile("appsettings.json"); 
    Configuration = builder.Build(); 
} 

e se non riesci a trovare il metodo AddJsonFile, devi aggiungere using Microsoft.Extensions.Configuration.Json;

0

Se hai fatto qualcosa con Project Debug Properties, potresti aver inavvertitamente sovrascritto la directory iniziale:

Project -> Right-click -> Properties -> Debug -> Profile e poi guarda la voce Working Directory.

Il più semplice è che sia vuoto.

0

Le risposte che suggeriscono di aggiungere .SetBasePath(env.ContentRootPath) in Startup.cs dipendono da un passaggio precedente.

primo, aggiungere la riga .UseContentRoot(Directory.GetCurrentDirectory()) per la costruzione WebHostBuilder in Program.cs in questo modo:

public class Program 
{ 
    public static void Main(string[] args) 
    { 
     var config = new ConfigurationBuilder() 
      .SetBasePath(Directory.GetCurrentDirectory()) 
      .AddEnvironmentVariables() 
      .Build(); 

     var host = new WebHostBuilder() 
      .UseConfiguration(config) 
      .UseKestrel() 
      .UseContentRoot(Directory.GetCurrentDirectory()) 
      .UseStartup<Startup>() 
      .Build(); 

     host.Run(); 
    } 
} 

Poi quanto segue funzionerà:

public Startup(IHostingEnvironment env) 
{ 
    var builder = new ConfigurationBuilder() 
     .SetBasePath(env.ContentRootPath) 
     .AddJsonFile("appsettings.json"); 

    Configuration = builder.Build(); 
} 
Problemi correlati