2016-07-09 14 views
21

Vì vậy, cuối cùng tôi đã có vòng để nhìn vào Core và tôi đã rơi vào rào cản đầu tiên. Tôi đang theo nguyên tắc cơ bản về Core Pluralsight ASP.NET và tôi nhận được một ngoại lệ khi cố gắng thêm tệp appsettings.json vào trình tạo cấu hình.Cấu hình ASP.NET Core 1.0Builder(). AddJsonFile ("appsettings.json"); không tìm thấy tập tin

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

    Configuration = builder.Build(); 
} 

Lỗi tôi nhận được là không tìm thấy tệp cấu hình 'appsettings.json' và không bắt buộc. Nhưng tôi đã tạo trực tiếp theo giải pháp của tôi giống như trong video khóa học.

Mọi đề xuất?

Chúc mừng,

Trả lời

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

    Configuration = builder.Build(); 
} 

Điều này dường như làm các trick. Tuy nhiên không chắc chắn đây là cách thích hợp để làm điều đó. Kinda cảm thấy như một hack.

+3

tôi đã có thể có được nó để làm việc sử dụng .SetBasePath (Directory.GetCurrentDirectory()), như được hiển thị ở đây: http://benfoster.io/blog/how-to-configure-kestrel-urls-in-aspnet-core-rc2 – Sako73

+1

Vâng, nếu nó là một hack, đó là một hack của Microsoft tự mình khi bạn thiết lập một ứng dụng ASP.NET Core Web trống mới. – David

9

Một giải pháp thay thế mà tôi tìm thấy từ số blog post này cũng hoạt động. Nó có thêm lợi ích khi không cần phải sửa đổi chữ ký phương thức khởi động của tệp Startup.cs.

Trong phần buildOptions thêm copyToOutput với tên tệp.

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

Bạn cần phải thêm các gói dưới đây:

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

Đây là những gì tôi đã mất tích. Cảm ơn! – JedatKinports

11

Một cách khác:

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(); 
    }  
} 

Trong Configure phương pháp:

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

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

Trên thực tế cho điều này bạn cần phải cung cấp cung cấp đường dẫn gốc từ biến môi trường của bạn, do đó bạn cần phải vượt qua IHostingEnvironment tài liệu tham khảo để cung cấp đường dẫn gốc:

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

và nếu bạn không thể tìm thấy phương thức AddJsonFile thì bạn phải thêm using Microsoft.Extensions.Configuration.Json;

0

Nếu bạn đã làm bất cứ điều gì với Project Debug Properties, sau đó bạn có thể vô tình ghi đè thư mục khởi động:

Project -> Right-click -> Properties -> Debug -> Profile và sau đó xem mục nhập trong Working Directory.

Cách đơn giản nhất là nó để trống.

0

Câu trả lời đề xuất thêm .SetBasePath(env.ContentRootPath) trong Startup.cs tùy thuộc vào bước trước.

Đầu tiên, thêm dòng .UseContentRoot(Directory.GetCurrentDirectory()) để xây dựng WebHostBuilder của bạn trong Program.cs như vậy:

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(); 
    } 
} 

Sau đó sau đây sẽ làm việc:

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

    Configuration = builder.Build(); 
} 
Các vấn đề liên quan