c# - لماذا يخبرني visual studio أن أسلوب AddJsonFile()غير معرف في فئة التكوين




configuration configuration-files asp.net-core config.json (5)

أقوم بتطوير مشروع ASP.NET 5 WebAPI باستخدام معاينة VS Ultimate 2015. أحاول تكوين التطبيق بهذه الطريقة (أرقام الأسطر هي مجرد أدلة):

1 using Microsoft.Framework.ConfigurationModel;
2
3 public IConfiguration Configuration { get; private set; }
4 
5 public Startup()
6 {
7     Configuration = new Configuration()
8         .AddJsonFile("config.json")
9         .AddEnvironmentVariables();
10 }

السطر 8 يعطيني خطأ: "التكوين" لا يحتوي على تعريف لـ "AddJsonFile" ...

ما المشكله؟.


Answers

تحتاج إلى تضمين حزمة Microsoft.Extensions.Configuration.Json NuGet إذا كنت تريد استدعاء الأسلوب .AddJsonFile() .

راجع: https://github.com/aspnet/Configuration/tree/dev/src/Microsoft.Framework.ConfigurationModel.Json

لمزيد من القراءة ، يوجد برنامج تعليمي رائع على: http://whereslou.com/2014/05/23/asp-net-vnext-moving-parts-iconfiguration/


في حال واجه أي شخص آخر مشكلة في ذلك ، أجرت Microsoft تغييرات متقطعة على هذا الجزء من الإطار في 16 أغسطس 2015. يجب عليك استيراد الإصدارات الصحيحة من التبعيات والتبديل إلى الطريقة الجديدة لإنشاء التكوين.

يتضمن التكوين الخاص بي:

{
  "webroot": "wwwroot",
  "version": "1.0.0-*",

  "dependencies": {
    "Microsoft.Framework.Runtime": "1.0.0-*",
    "Microsoft.AspNet.Server.IIS": "1.0.0-beta7",
    "Microsoft.AspNet.Diagnostics": "1.0.0-beta7",
    "Microsoft.AspNet.Mvc": "6.0.0-beta7",
    "Microsoft.Framework.Configuration": "1.0.0-beta7",
    "Microsoft.Framework.Configuration.Json": "1.0.0-*"
  },
...
}

قد يساعدك هذا الرمز ، المستوحى من هذا السؤال ، في مساعدتك:

using System;
using Microsoft.AspNet.Builder;
using Microsoft.Framework.DependencyInjection;
using Messenger.Services;
using Microsoft.Framework.Configuration;
using Microsoft.Dnx.Runtime;
using Microsoft.AspNet.Hosting;

namespace Messenger
{
    public class Startup
    {
        public Startup(IHostingEnvironment env, IApplicationEnvironment appEnv)
        {
            var configurationBuilder = new ConfigurationBuilder(appEnv.ApplicationBasePath)
                .AddJsonFile("config.json")
                .AddEnvironmentVariables();
            Configuration = configurationBuilder.Build();
        }

        public IConfiguration Configuration { get; set; }
    }
...

}

آمل أن يساعد.


تحت project.json ستحتاج إلى إضافته ضمن التبعيات

dependencies {
"Microsoft.Extensions.Configuration.Json": "1.0.0"
}

أعرف أن هذا قديم بعض الشيء لكنني واجهت هذه المشكلة فقط عند محاولة إنشاء أول مشروع فارغ Asp.net core 1.0. لاستخدام طريقة AddJsonFile ، يجب عليك إضافة مرجع إلى Microsoft.Extensions.Configuration.Json إلى مشروعك عبر Nuget.

لتثبيت المرجع ، قم بتشغيل الأمر أدناه في وحدة التحكم في إدارة الحزمة:

م> تثبيت حزمة Microsoft.Extensions.Configuration.Json


إذا كنت سعيدًا باستخدام Microsoft Reactive Extensions ، فيمكن أن يعمل هذا بشكل جيد:

public class Foo
{
    public delegate void MyEventHandler(object source, MessageEventArgs args);
    public event MyEventHandler _event;
    public string ReadLine()
    {
        return Observable
            .FromEventPattern<MyEventHandler, MessageEventArgs>(
                h => this._event += h,
                h => this._event -= h)
            .Select(ep => ep.EventArgs.Message)
            .First();
    }
    public void SendLine(string message)
    {
        _event(this, new MessageEventArgs() { Message = message });
    }
}

public class MessageEventArgs : EventArgs
{
    public string Message;
}

يمكنني استخدامه مثل هذا:

var foo = new Foo();

ThreadPoolScheduler.Instance
    .Schedule(
        TimeSpan.FromSeconds(5.0),
        () => foo.SendLine("Bar!"));

var resp = foo.ReadLine();

Console.WriteLine(resp);

كنت بحاجة إلى استدعاء رسالة SendLine على موضوع مختلف لتجنب القفل ، ولكن هذا الرمز يظهر أنه يعمل كما هو متوقع.





c# configuration configuration-files asp.net-core config.json