কীভাবে সক্রিয় অ্যাপ.config ফাইলের সন্ধান করবেন?


167

আমি এই ব্যতিক্রম হ্যান্ডলারটি শেষ করার চেষ্টা করছি:

if (ConfigurationManager.ConnectionStrings["ConnectionString"]==null)
{
    string pathOfActiveConfigFile = ...?
    throw new ConfigurationErrorsException(
       "You either forgot to set the connection string, or " +
       "you're using a unit test framework that looks for  "+
       "the config file in strange places, update this file : " 
       + pathOfActiveConfigFile);
}

এই সমস্যাটি তখনই আমার মনে হয় যখন আমি নুনিট ব্যবহার করি।

উত্তর:


363

এটা চেষ্টা কর

AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

আশা করি এটা সাহায্য করবে


এটি সমাবেশ হিসাবে ব্যবহার করার চেষ্টা করার চেয়ে আরও ভাল উপায় yyGetEntryAsorses () + ".config" যা এএসপি.নেটের কিছু পরিস্থিতিতে এবং অ্যাপডোমাইনগুলি ব্যবহার করার সময় কিছু পরিস্থিতিতে কাজ করে না।
কনটাঙ্গো

4
আমি কীভাবে এই পথটি পরিবর্তন করতে পারি?
বিগনেশ সুব্রামনিয়ান

ধন্যবাদ. আমার ভিএস ২০০৮ -> ভিএস ২০১৩ - এ অ্যাপ্লিকেশনটি আপগ্রেড করা হয়েছে যা অ্যাপ.config ফাইলটি পড়তে অস্বীকার করেছে। তারপরে আমি অ্যাপডোমাইন.কন্টেনডোমাইন.সেটআপ ইনফরমেশন. কনফিগারেশন ফাইলের মাধ্যমে জানতে পারি যে এটি XXX.vshost.exe.config অনুসন্ধান করছে যা উত্পন্ন হচ্ছে না। তাই আমি এটি প্রোজেক্ট প্রোপার্টি ডিবাগ ট্যাবে ভিএস হোস্টিং বন্ধ করে দিয়েছি। তারপর আমি {projectName} .config আমার app.config ফাইল নামান্তর করতে ছিল, বিন ফোল্ডারে রাখা হবে এবং এটা অবশেষে কাজ
drzounds

1
আমার পক্ষে কাজ করেনি। এই উত্তরটি অবশ্য করেছিল।
কে জেড

4
। নেট কোর সম্পর্কে কি?
jjxtra

64

কড়া কথায় বলতে গেলে কোনও কনফিগারেশন ফাইল নেই। এএসপি.নেট 1 বাদে ইনবিল্ট ( System.Configuration) সমর্থনটি ব্যবহার করে তিনটি কনফিগারেশন ফাইল থাকতে পারে । মেশিন কনফিগার ছাড়াও: app.exe.configব্যবহারকারী রোমিং এবং ব্যবহারকারী স্থানীয়।

"গ্লোবাল" কনফিগারেশন ( উদাহরণ। কনফিগ) পেতে:

ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
                    .FilePath

ConfigurationUserLevelপ্রতি-ব্যবহারের রোমিং এবং নন-রোমিং কনফিগারেশন ফাইলগুলির জন্য বিভিন্ন মান ব্যবহার করুন ।


1 যার সম্পূর্ণ ভিন্ন মডেল রয়েছে যেখানে শিশু ফোল্ডারগুলির সামগ্রী (আইআইএস-ভার্চুয়াল বা ফাইল সিস্টেম) web.configপিতা-মাতার যোগে বা ওভাররাইড করতে পারে (সেটিংসের উপর নির্ভর করে) web.config


2
আমি প্রথমে "উত্তর" প্রস্তুত করেছি, যা খুব সহায়ক ছিল। তবে শেষে আমার সত্যিই এই পদ্ধতির দরকার ছিল, তাই এটিও এখানে রাখার জন্য ধন্যবাদ।
নোম গাল

সিস্টেমে কনফিগারেশন
ব্ল্যাক হোরাস

9

যদি আপনি বোঝাতে চান যে আপনি যখন নুনিট ব্যবহার করেন তখন কেবল নালার রিটার্ন পাচ্ছেন, তবে সম্ভবত আপনার কানেকশনস্ট্রিংয়ের মানটি আপনার অ্যাপ্লিকেশনটির আপনার অ্যাপ্লিকেশন কনফিগটি আপনার টেস্ট লাইব্রেরির অ্যাপকনফাইগে অনুলিপি করতে হবে।

এটি যখন পরীক্ষার লোডার দ্বারা চালিত হয়, পরীক্ষার সমাবেশটি রানটাইমের সময় লোড হয় এবং এটি নিজের অ্যাপ্লিকেশন কনফিগে দেখতে (সংকলনের সময় testAs એવું.dll.config নামকরণ করা হয়েছে) পরিবর্তে আপনার অ্যাপ্লিকেশনগুলির কনফিগারেশন ফাইলটিতে প্রদর্শিত হবে।

আপনি যে সমাবেশটি চালাচ্ছেন তার অবস্থান পেতে, চেষ্টা করুন

System.Reflection.Assembly.GetExecutingAssembly().Location

1
@ সিড্রিক রুপ থেকে "অ্যাপডোমাইন.কন্টেনডোমাইন.সেটআপ ইনফরমেশন.কনফিগারেশনফাইলে" পরামর্শ দিন অন্যথায় আপনি এএসপি.এনইটি-র কিছু পরিস্থিতিতে এবং অ্যাপডোমাইনগুলি ব্যবহার করার সময় কিছু পরিস্থিতিতে ব্যতিক্রম পাবেন।
কনটাঙ্গো

6

নিশ্চিত করুন যে আপনি ফাইলটিতে থাকা বৈশিষ্ট্যগুলি ক্লিক করেছেন এবং এটিকে "সর্বদা অনুলিপি করুন" এ সেট করেছেন বা এটি আপনার ডিগ্রী ফোল্ডারে থাকবে না যেখানে আপনার খুশী লিল ডিএল কনফিগার করতে হবে যেখানে এটি আরও দরকার এবং এটি আরও কাওবেল যুক্ত করুন


6

আমি যখন প্রথম বুঝতে পারি যে ইউনিট পরীক্ষামূলক প্রকল্পটি সেই প্রকল্পে অ্যাপকনফাইগটি উল্লেখ করেছে তবে আমার প্রোডাকশন কোড প্রকল্পের সাথে যুক্ত অ্যাপকনফাইগ (অবশ্যই, ডিওএইচ) আমি প্রোড প্রকল্পের পোস্ট বিল্ড ইভেন্টে কেবল একটি লাইন যুক্ত করেছি যা পরীক্ষার প্রকল্পের বিন ফোল্ডারে app.config অনুলিপি করবে।

সমস্যা সমাধান

আমি এখনও অবধি কোনও অদ্ভুত পার্শ্ব প্রতিক্রিয়া লক্ষ্য করিনি, তবে আমি নিশ্চিত নই যে এটি সঠিক সমাধান, তবে কমপক্ষে এটি কার্যকর বলে মনে হচ্ছে।


4

আমি দেখেছি যে আরও একটি বিকল্প এখানে অনুপস্থিত:

const string APP_CONFIG_FILE = "APP_CONFIG_FILE";
string defaultSysConfigFilePath = (string)AppDomain.CurrentDomain.GetData(APP_CONFIG_FILE);

এটি সম্পর্কে দুর্দান্ত জিনিস, হ্যাকি যেমন দেখায় তেমন এটি হ'ল এটি নেট স্ট্যান্ডার্ড 2.0 এর অধীনে সংকলন করে। এটি .NET কোর ২.০ এর অধীনে নাল ফেরায়, তবে মাইগ্রেশনের সময় এটি কার্যকর।
EM0

3

আপনার কনফিগারেশন ফাইলের অবস্থানের উপর নির্ভর করে System.Reflection.Assembly.GetExecutingAssembly().Locationআপনার যা প্রয়োজন তা করতে পারে।


2
অতিরিক্তভাবে, আপনার একই সাথে বেশ কয়েকটি "সক্রিয়" কনফিগার ফাইল থাকতে পারে। মেশিন কনফিগ, ফ্রেমওয়ার্ক লেভেল ওয়েবকনফিগ, অ্যাপ্লিকেশন স্তর কনফিগারেশন ইত্যাদি ... তাই আমি মনে করি না যে আপনার অ্যাপ্লিকেশনে উপলব্ধ সমস্ত সম্ভাব্য কনফিগার ফাইলগুলি পার্স না করে স্বয়ংক্রিয়ভাবে একটি অনন্য সংযোগ স্ট্রিং ফাইলের অবস্থান সনাক্ত করার উপায় আছে।
উইলিয়াম এডমন্ডসন 14

3

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

var map = new ExeConfigurationFileMap { ExeConfigFilename = "MyComponent.dll.config" };
var path = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None).FilePath;

কনফিগারেশন ফাইলটি সি: \ প্রোগ্রাম ফাইলগুলি \ আইআইএস এক্সপ্রেস \ মাইকমম্পোনেন্ট.ডিল.কমফিগে পরিণত হয়েছিল। এটির জন্য আকর্ষণীয় স্থান।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.