2017-07-11 27 views
7

Tôi gặp sự cố. Tôi cần phải viết một chương trình trong Net Core (C#) mà sử dụng app.config như thế này:Sử dụng app.config trong .Net Core

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="custom" type="ConfigurationSample.CustomConfigurationSection, ConfigurationSample"/> 
    </configSections> 
    <connectionStrings> 
    <add name="sampleDatabase" connectionString="Data Source=localhost\SQLExpress;Initial Catalog=SampleDatabase;Integrated Security=True"/> 
    </connectionStrings> 
    <appSettings> 
    <add key="sampleApplication" value="Configuration Sample"/> 
    </appSettings> 
    <custom> 
    <customConfigurations> 
     <add key="customSample" name="Mickey Mouse" age="83"/> 
    </customConfigurations> 
    </custom> 
</configuration> 

và tôi viết:

string connectionString = ConfigurationManager.ConnectionStrings["sampleDatabase"].ConnectionString; 
Console.WriteLine(connectionString); 

// read appSettings configuration 
string appSettingValue = ConfigurationManager.AppSettings["sampleApplication"]; 
Console.WriteLine(appSettingValue); 

và nó là ví dụ từ internet vì vậy tôi nghĩ sẽ nơi làm việc, nhưng tôi nhận được ngoại lệ:

System.Configuration.ConfigurationErrorsException: 'Error Initializing the configuration system.' 
Inner Exception 
TypeLoadException: Could not load type 'System.Configuration.InternalConfigurationHost' from assembly 'CoreCompat.System.Configuration, Version=4.2.3.0, Culture=neutral, PublicKeyToken=null' because the method 'get_bundled_machine_config' has no implementation (no RVA). 

tôi tải về thông qua NuGet - Cài đặt-Package CoreCompat.System.Configuration -version 4.2.3-R4 -Pre và vẫn không làm việc. Có lẽ ai đó có thể giúp tôi?

+1

Tôi nghĩ đối với lõi .net, bạn sẽ sử dụng các tệp json để định cấu hình. Nhìn kìa. – Phiter

+0

Trong .NET Core bạn sử dụng appsettings.json, chứ không phải app.config. –

+0

nhưng tôi đã nói về .Net Core và không lõi ASP.Net – Nju

Trả lời

3
  1. Bạn có thể sử dụng Configuration API với bất kỳ ứng dụng NET Core, không chỉ với ứng dụng ASP.NET Core. Nhìn vào mẫu được cung cấp trong liên kết, cho biết cách đọc cấu hình trong ứng dụng bảng điều khiển.

  2. Trong hầu hết các trường hợp, nguồn JSON (đọc là .json tệp) là nguồn cấu hình phù hợp nhất.

    Lưu ý: đừng nhầm lẫn khi ai đó nói rằng tệp cấu hình phải là appsettings.json. Bạn có thể sử dụng bất kỳ tên tệp nào, phù hợp với bạn và vị trí tệp có thể khác nhau - không có quy tắc cụ thể.

    Nhưng, như thế giới thực là rất phức tạp, có rất nhiều các nhà cung cấp cấu hình khác nhau:

    • các định dạng tập tin (INI, JSON và XML)
    • đối số dòng lệnh
    • Biến môi trường

    v.v. Bạn thậm chí có thể sử dụng/viết một nhà cung cấp tùy chỉnh.

  3. Thực tế, app.config tệp cấu hình là tệp XML. Vì vậy, bạn có thể đọc cài đặt từ nó bằng cách sử dụng nhà cung cấp cấu hình XML (source on github, nuget link). Nhưng hãy nhớ, nó sẽ chỉ được sử dụng như một nguồn cấu hình - bất kỳ logic nào về cách ứng dụng của bạn hoạt động sẽ được bạn triển khai. Nhà cung cấp cấu hình sẽ không thay đổi 'cài đặt' và đặt chính sách cho ứng dụng của bạn, nhưng chỉ đọc dữ liệu từ tệp.

+0

"nguồn trên github" liên kết bị hỏng – dimaaan

+0

@dimaaan Không còn nữa. –

5

Có thể sử dụng thông thường System.Configuration ngay cả trong .NET Core 2.0 trên Linux. Hãy thử ví dụ thử nghiệm này:

  1. Tạo một NET Chuẩn 2.0 Library (nói MyLib.dll)
  2. gia tăng các NuGet gói System.Configuration.ConfigurationManager v4.4.0. Điều này là cần thiết vì gói này không được bao gồm trong gói meta NetStandard.Library v2.0.0 (Tôi hy vọng rằng thay đổi)
  3. Tất cả các lớp C# của bạn bắt nguồn từ ConfigurationSection hoặc ConfigurationElement đi vào MyLib.dll. Ví dụ: MyClass.cs có nguồn gốc từ ConfigurationSectionMyAccount.cs có nguồn gốc từ ConfigurationElement.Chi tiết triển khai nằm ngoài phạm vi tại đây nhưng Google is your friend
  4. Tạo ứng dụng .NET Core 2.0 (ví dụ: ứng dụng bảng điều khiển, MyApp.dll). Ứng dụng .NET Core kết thúc với .dll thay vì .exe trong Khung.
  5. Tạo app.config trong MyApp bằng các phần cấu hình tùy chỉnh của bạn. Điều này rõ ràng nên phù hợp với thiết kế lớp học của bạn ở # 3 ở trên. Ví dụ:
 
    <?xml version="1.0" encoding="utf-8"?> 
    <configuration> 
     <configSections> 
     <section name="myCustomConfig" type="MyNamespace.MyClass, MyLib" /> 
     </configSections> 
     <myCustomConfig> 
     <myAccount id="007" /> 
     </myCustomConfig> 
    </configuration> 

Đó là nó - bạn sẽ thấy rằng app.config được phân tách đúng trong MyApp và mã hiện có trong vòng MyLib công trình tốt. Đừng quên chạy dotnet restore nếu bạn chuyển đổi nền tảng từ Windows (dev) sang Linux (thử nghiệm).

Các vấn đề liên quan