রানটাইমে আপনি কীভাবে ওয়েবকনফাইগ অ্যাপসেটিংগুলি সংশোধন করবেন?


84

রানটাইমের সময়ে কীভাবে ওয়েবকনফাইগ অ্যাপসেটেটিং মানগুলি পরিবর্তন করতে হয় সে সম্পর্কে আমি বিভ্রান্ত। উদাহরণস্বরূপ, আমার কাছে এই অ্যাপসেটিং বিভাগ রয়েছে:

<appSettings>
  <add key="productspagedesc" value="TODO: Edit this default message" />
  <add key="servicespagedesc" value="TODO: Edit this default message" />
  <add key="contactspagedesc" value="TODO: Edit this default message" />
  <add key="aboutpagedesc" value="TODO: Edit this default message" />
  <add key="homepagedesc" value="TODO: Edit this default message" />
 </appSettings>

ধরা যাক, আমি রানটাইমে "হোমপেজডেস্ক" কীটি সংশোধন করতে চাই। আমি কনফিগারেশন ম্যানেজার এবং ওয়েব কনফিগারেশন ম্যানেজার স্ট্যাটিক ক্লাস চেষ্টা করেছি, তবে সেটিংসটি "কেবল পঠনযোগ্য"। রানটাইমে আমি কীভাবে অ্যাপসেটিং মানগুলি সংশোধন করব?

আপডেট: ঠিক আছে, তাই আমি এখানে 5 বছর পরে। আমি যে অভিজ্ঞতাটি আমাকে বলেছে তা উল্লেখ করতে চাই, আমাদের এমন কোনও কনফিগারেশন রাখা উচিত নয় যা ওয়েবকনফাইগ ফাইলটিতে রানটাইম সময় ইচ্ছাকৃত সম্পাদনাযোগ্য হয় না বরং পরিবর্তে ব্যবহারকারীদের মধ্যে যে কোনও মন্তব্য করেছিল সে হিসাবে আমাদের এটি আলাদা একটি এক্সএমএল ফাইলে রাখা উচিত। অ্যাপ্লিকেশনটি পুনঃসূচনা করতে এটির জন্য ওয়েবকনফাইগ ফাইলের কোনও সম্পাদনা প্রয়োজন হবে না যার ফলশ্রুতি ক্ষুব্ধ ব্যবহারকারীরা আপনাকে ডাকবে।


এখানে একটি ভাল লিঙ্ক রয়েছে যা রানটাইমে ওয়েবকনফিগটি সংশোধন এবং প্রয়োগে এর প্রভাব সম্পর্কে সুন্দরভাবে ব্যাখ্যা করে। http://aspdotnethacker.blogspot.com/2010/05/modify-webconfig-file-at-runtime.html

4
@ ব্যবহারকারী 330004 আপনার সরবরাহিত লিঙ্কটি এখন আর বৈধ নয়
ম্যাকআার্থে

সংরক্ষণাগারিত সংস্করণটি পেতে কয়েক সেকেন্ড সময় লাগে !
স্টুয়ার্ট

উত্তর:


84

আপনার ব্যবহার করা দরকার WebConfigurationManager.OpenWebConfiguration(): উদাহরণস্বরূপ:

Dim myConfiguration As Configuration = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~")
myConfiguration.ConnectionStrings.ConnectionStrings("myDatabaseName").ConnectionString = txtConnectionString.Text
myConfiguration.AppSettings.Settings.Item("myKey").Value = txtmyKey.Text
myConfiguration.Save()

আমার মনে হয় আপনার সেটও লাগতে পারে আপনারও মেশিন.কনফাইগঅ্যালাউলোকেশন । এটি একটি বুলিয়ান মান যা নির্দেশ করে যে পৃথক পৃষ্ঠাগুলি উপাদানটি ব্যবহার করে কনফিগার করা যায় কিনা। যদি "परवानगी স্থান" মিথ্যা থাকে তবে এটি পৃথক উপাদানগুলিতে কনফিগার করা যায় না।

অবশেষে, আপনি যদি আইআইএসে আপনার অ্যাপ্লিকেশন চালান এবং ভিজ্যুয়াল স্টুডিও থেকে আপনার পরীক্ষার নমুনা চালান তবে এটি একটি পার্থক্য করে। ASP.NET প্রক্রিয়া পরিচয়টি হ'ল আইআইএস অ্যাকাউন্ট, এএসপনেট বা নেটওয়র্ক সার্ভিসেস (আইআইএস সংস্করণের উপর নির্ভর করে)।

ওয়েবকনফিগ যেখানে ফোল্ডারে থাকে সেই ফোল্ডারে অ্যাস্পনেট বা নেটওয়র্ক পরিষেবাদি মঞ্জুর করা দরকার।


4
প্রতিক্রিয়া মিচ জন্য ধন্যবাদ। আপনি আমার প্রশ্নের উত্তর দিয়েছেন। আমি যা করেছি তা হ'ল আমি প্রশাসক হিসাবে ভিএস 2008 চালাচ্ছি এবং সবকিছু ঠিকঠাক ছিল।
jerbersoft

অন্যের কাছে সম্ভবত সুস্পষ্ট (আমার কাছে ছিল না), এই উত্তরটি, পাশাপাশি আমিন যা কার্যত একই রকম, আসলে আপনার শারীরিক ওয়েবকনফিগ ফাইলটি ওভাররাইট করে, নির্দিষ্ট চলমান উদাহরণের জন্য কেবল মেমরির সেটিংটি ওভাররাইড করে না।
k3davis

24

ওয়েবকনফিগ পরিবর্তন করার ফলে সাধারণত একটি অ্যাপ্লিকেশন পুনরায় চালু হয়।

আপনার অ্যাপ্লিকেশনটির নিজস্ব সেটিংস সম্পাদনা করার জন্য যদি সত্যিই আপনার প্রয়োজন হয়, তবে আপনার সেটিংসটি ডেটাবেস করা বা সম্পাদনাযোগ্য সেটিংস সহ কোনও এক্সএমএল ফাইল তৈরি করা যেমন আলাদা পদ্ধতির বিবেচনা করা উচিত।


4
হাই, প্রতিক্রিয়া জন্য ধন্যবাদ। তবে এই "কনফিগারেশন" শ্রেণিটিতে একটি "সংরক্ষণ করুন" ফাংশন রয়েছে। নতুন সেটিংস সক্রিয় হওয়ার জন্য আপনার কি অ্যাপটি সত্যিই পুনরায় চালু করতে হবে?
জেরবারসফট

4
ওয়েবকনফিগ পরিবর্তন করা স্বয়ংক্রিয়ভাবে একটি অ্যাপ্লিকেশন পুনঃসূচনা ট্রিগার করে।
মাইক কোলে

4
ডায়নামিকভাবে ওয়েবকনফিগ পরিবর্তন করার পরামর্শ দেওয়া উচিত নয়। আমি মানটি (এক্সএমএল) ফাইলে সংরক্ষণ করতে পছন্দ করব।
দীপক মিশ্র

পুনরায় চালু করা অ্যাপ্লিকেশনটি কেন খারাপ এবং কেউ এট্রিবিউটটিকে অন্য কোনও ফাইলে স্থানান্তরিত করার পরামর্শ দিতে পারে?
বেন

4
@ বেন - আমি জানি যে এর কয়েক মাস পরে, তবে কেবল ক্ষেত্রে - অ্যাপ্লিকেশনটি পুনরায় চালু করার অর্থ হ'ল পুনরায় সূচনা করার সময় আপনার অ্যাপটিতে লগ ইন করা যে কেউ স্বয়ংক্রিয়ভাবে লগ আউট হয়ে যাবে এবং সম্ভবত একটি ত্রুটির সম্মুখীন হতে পারে। (বিভিন্ন পরিস্থিতিতে যেমন ওয়েব ফার্মগুলি সত্ত্বেও ...)। রাগান্বিত ব্যবহারকারীরা সমর্থন ইত্যাদির সাথে যোগাযোগ করেন, আপনার পরিচিতিগুলিকে সমর্থন করেন ইত্যাদি ইত্যাদি ...
ফেচিজ লা শ্যাচ

24

এবং আপনি যদি অ্যাপ্লিকেশনটি পুনরায় চালু করতে এড়াতে চান তবে আপনি appSettingsবিভাগটি সরিয়ে নিতে পারেন :

<appSettings configSource="Config\appSettings.config"/>

একটি পৃথক ফাইল। এবং সংমিশ্রণেConfigurationSaveMode.Minimal

var config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
config.Save(ConfigurationSaveMode.Minimal);

আপনি appSettingsঅ্যাপ্লিকেশন পুনরায় আরম্ভ না করে এবং সাধারণ অ্যাপসেটিং বিভাগের চেয়ে আলাদা বিন্যাসযুক্ত কোনও ফাইল ব্যবহার না করেই বিভিন্ন সেটিংসের জন্য স্টোর হিসাবে বিভাগটি ব্যবহার চালিয়ে যেতে পারেন ।


22

2012 এটি এই দৃশ্যের জন্য আরও ভাল সমাধান ( ভিজ্যুয়াল স্টুডিও ২০০৮ এর সাথে পরীক্ষিত ):

Configuration config = WebConfigurationManager.OpenWebConfiguration(HttpContext.Current.Request.ApplicationPath);
config.AppSettings.Settings.Remove("MyVariable");
config.AppSettings.Settings.Add("MyVariable", "MyValue");
config.Save();

আপডেট 2018 =>
বনাম 2015-এ পরীক্ষিত - Asp.net এমভিসি 5

var config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
config.AppSettings.Settings["MyVariable"].Value = "MyValue";
config.Save();

যদি আপনার উপাদানটি পরীক্ষা করার প্রয়োজন হয় তবে এই কোডটি ব্যবহার করুন:

var config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
if (config.AppSettings.Settings["MyVariable"] != null)
{
config.AppSettings.Settings["MyVariable"].Value = "MyValue";
}
else { config.AppSettings.Settings.Add("MyVariable", "MyValue"); }
config.Save();

কেন আপনি ভাল কিছুটা ব্যাখ্যা করতে পারেন? আমি জানি কনফিগারেশন স্টাফ মাঝে মাঝে কিছুটা জটিল।
জুলাইলগন

4
এই কোডটি আরও ছোট এবং আরও বোধগম্য! অন্তত আমার জন্য.
আমিন ঘাদেরি

4
ওহ, এটি তখন ব্যক্তিগত স্বাদের কারণে, আমি আসলে ভেবেছিলাম এটি কোনওভাবেই যুক্তিযুক্তভাবে আলাদা was আমি এক্ষেত্রে আপনার সাথে অত্যন্ত একমত নই যদিও বাস্তবে একগুচ্ছ কারণে: প্রথম কারণ আপনাকে একই কী দু'বার উল্লেখ করতে হবে, দ্বিতীয় কারণ আপনি যা করছেন তা আসলে প্রয়োজনের চেয়ে শব্দার্থগতভাবে আলাদা ('আপডেট' বনাম 'অপসারণ-> যোগ করুন ') এবং তৃতীয় কারণ কোডটি আসলে দীর্ঘতর (আপনি অন্যথায় এখানে কেন জিনিস তা নিশ্চিত নন) এবং ভুলগুলির জন্য উন্মুক্ত। এছাড়াও, যদি কোনও কারণে কলগুলির মধ্যে আপনার কোডটি ব্যর্থ হয়? আপনার আবেদনটি সেখান থেকে ভেঙে গেছে বলে আমি মনে করি।
জুলাইগলন

4
এই কোডটি MyVariable- তে কোনও মন্তব্য মুছে ফেলবে।
ব্লেগাস

হ্যাঁ অবশ্যই ! এই কোড কোডটি সমস্ত ভেরিয়েবলগুলিতে আবার লিখতে হবে, তবে এটি কার্যকর হয়। আপনি মন্তব্য কোড ব্যবহার করার সময় আমি এটি ব্যবহার করার পরামর্শ দিই না। ধন্যবাদ.
আমিন ঘাদেরী

14

আমি জানি এই প্রশ্নটি পুরানো, তবে আমি আমার বাস্তব বিশ্বের অভিজ্ঞতার সাথে মিলিত হয়ে এএসপি.নেট \ আইআইএস ওয়ার্ল্ডের বর্তমান অবস্থার ভিত্তিতে একটি উত্তর পোস্ট করতে চেয়েছিলাম।

আমি সম্প্রতি আমার সংস্থার এমন একটি প্রকল্পের নেতৃত্ব দিয়েছি যেখানে আমি আমাদের ওয়েবকনফিগ ফাইলগুলিতে একটি কেন্দ্রীয় স্থানে থাকা সমস্ত অ্যাপ্লিকেশন এবং সংযোগসার্টিংস সেটিংসকে একীভূত করতে ও পরিচালনা করতে চেয়েছিলাম। প্রকল্পগুলির পরিপক্কতা এবং স্থিতিশীলতার কারণে আমি এমন একটি পদ্ধতির অনুসরণ করতে চেয়েছিলাম যেখানে চিড়িয়াখানায় আমাদের কনফিগারেশন সেটিংস সংরক্ষণ করা হয়েছিল। চিড়িয়াখানার কনফিগারেশন এবং ক্লাস্টার পরিচালনার অ্যাপ্লিকেশনটি ডিজাইন করে তা উল্লেখ করার দরকার নেই।

প্রকল্পের লক্ষ্যগুলি খুব সাধারণ ছিল;

  1. চিড়িয়াখানার সাথে যোগাযোগের জন্য এএসপি.এনইটি পান
  2. গ্লোবাল.এক্সএক্স, অ্যাপ্লিকেশন_স্টার্টে - চিড়িয়াখানা থেকে ওয়েবকনফিগ সেটিংস টানুন।

চিড়িয়াখিরের সাথে কথা বলার জন্য এএসপি.এনইটি পাওয়ার প্রযুক্তিগত অংশটি পাস করার পরে, আমি দ্রুত নিম্নলিখিত কোডটি দিয়ে একটি প্রাচীরটি খুঁজে পেয়েছিলাম এবং হিট করেছি;

ConfigurationManager.AppSettings.Add(key_name, data_value)

আমি অ্যাপসেটেটিং সংগ্রহে নতুন সেটিংস যুক্ত করতে চেয়েছি বলে এই বিবৃতিটি সবচেয়ে যুক্তিযুক্ত বোধ তৈরি করেছে। যাইহোক, মূল পোস্টার হিসাবে (এবং আরও অনেক) উল্লিখিত, সংগ্রহটি কেবল পঠনযোগ্য বলে উল্লেখ করে এই কোড কলটি একটি ত্রুটি প্রদান করে।

কিছুটা গবেষণা করার পরে এবং লোকেদের এই সমস্যার চারপাশে কাজ করার বিভিন্ন উপায় দেখতে পেয়ে আমি খুব নিরুৎসাহিত হয়ে পড়েছিলাম। আদর্শ দৃশ্যের চেয়ে কম বলে মনে হয়েছিল তার জন্য হাল ছেড়ে দেওয়া বা স্থির করার পরিবর্তে, আমি খনন করে দেখার চেষ্টা করেছি যে আমি কিছু হারিয়ে যাচ্ছি কিনা।

একটি সামান্য পরীক্ষা এবং ত্রুটিযুক্ত হয়ে, আমি খুঁজে পেয়েছি যে নীচের কোডটি আমি যা চাইছিলাম ঠিক তাই করবে;

ConfigurationManager.AppSettings.Set(key_name, data_value)

কোডের এই লাইনটি ব্যবহার করে, আমি এখন আমার অ্যাপ্লিকেশন_স্টার্টে চিড়িয়াখানা থেকে সমস্ত 85 অ্যাপসেটেটিং কীগুলি লোড করতে সক্ষম হয়েছি।

আইআইএস পুনর্ব্যবহারকারীদের ওয়েবকনফাইগ ট্রিগারকারী পরিবর্তন সম্পর্কে সাধারণ বিবৃতিগুলির ক্ষেত্রে, আমি পর্দার আড়ালের পরিস্থিতি পর্যবেক্ষণ করতে নিম্নলিখিত অ্যাপপুল সেটিংস সম্পাদনা করেছি;

appPool-->Advanced Settings-->Recycling-->Disable Recycling for Configuration Changes = False
appPool-->Advanced Settings-->Recycling-->Generate Recycle Event Log Entry-->[For Each Setting] = True

সেটিংসের সংমিশ্রণের সাথে, যদি এই প্রক্রিয়াটি কোনও অ্যাপপুলের পুনর্ব্যবহারের কারণ হয়ে থাকে তবে ইভেন্ট লগ এন্ট্রিটি রেকর্ড করা উচিত ছিল যা এটি ছিল না।

এটি আমাকে এই সিদ্ধান্তে নিয়ে যায় যে এটি একটি কেন্দ্রীভূত স্টোরেজ মাধ্যম থেকে অ্যাপ্লিকেশন সেটিংস লোড করা সম্ভব এবং সত্যই নিরাপদ।

আমার উল্লেখ করা উচিত যে আমি উইন্ডোজ on এ আইআইএস .5.৫ ব্যবহার করছি। কোডটি আইআইএস ৮-এ উইন ২০১২-তে স্থাপন করা হবে। এই উত্তরটির সাথে সম্পর্কিত যে কোনও পরিবর্তন হওয়া উচিত, আমি সেই উত্তরটি সেই অনুযায়ী আপডেট করব।


এটি সম্ভবত আমাকে কয়েক ঘন্টা বাঁচিয়েছে। অনেক ধন্যবাদ!
ড্রিউ ডেলাানো

4

সরাসরি বিন্দুতে কে পছন্দ করে,

আপনার কনফিগারেশনে

    <appSettings>

    <add key="Conf_id" value="71" />

  </appSettings>

আপনার কোডে (সি #)

///SET
    ConfigurationManager.AppSettings.Set("Conf_id", "whateveryourvalue");
      ///GET              
    string conf = ConfigurationManager.AppSettings.Get("Conf_id").ToString();

0

এটা চেষ্টা কর:

using System;
using System.Configuration;
using System.Web.Configuration;

namespace SampleApplication.WebConfig
{
    public partial class webConfigFile : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //Helps to open the Root level web.config file.
            Configuration webConfigApp = WebConfigurationManager.OpenWebConfiguration("~");
            //Modifying the AppKey from AppValue to AppValue1
            webConfigApp.AppSettings.Settings["ConnectionString"].Value = "ConnectionString";
            //Save the Modified settings of AppSettings.
            webConfigApp.Save();
        }
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.