سؤال

لدي exe مع App.Config الملف.الآن أريد أن إنشاء المجمع dll حول exe لكي تستهلك بعض الوظائف.

السؤال هو كيف يمكنني الوصول إلى التطبيق.التكوين الملكية في exe من المجمع dll?

ربما يجب أن تكون أكثر قليلا في الأسئلة لدي التطبيق التالي.التكوين المحتوى مع exe:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="myKey" value="myValue"/>
  </appSettings>
</configuration>

السؤال هو كيفية كيفية الحصول على "myValue" للخروج من المجمع dll?


شكرا على الحل الخاص بك.

في الواقع المفهوم الأولي إلى تجنب ملف XML طريقة القراءة أو ينق أو أيا كان.بلدي المفضل الحل هو استخدام إدارة تكوين المكتبات وما شابه.

سوف نقدر أي مساعدة يستخدم الفئات التي عادة ما ترتبط مع الوصول إلى التطبيق.التكوين خصائص.

هل كانت مفيدة؟

المحلول 2

بعد بعض التجارب وجدت طريقة للقيام بذلك.

  1. إضافة التطبيق.ملف التكوين إلى اختبار المشروع.استخدام "إضافة ارتباط" الخيار.
  2. استخدام System.Configuration.ConfigurationManager.AppSettings["myKey"] للوصول إلى القيمة.

نصائح أخرى

على ConfigurationManager.OpenMappedExeConfiguration طريقة سوف تسمح لك أن تفعل هذا.

عينة من MSDN الصفحة:

static void GetMappedExeConfigurationSections()
{
    // Get the machine.config file.
    ExeConfigurationFileMap fileMap =
        new ExeConfigurationFileMap();
    // You may want to map to your own exe.comfig file here.
    fileMap.ExeConfigFilename = 
        @"C:\test\ConfigurationManager.exe.config";
    System.Configuration.Configuration config =
        ConfigurationManager.OpenMappedExeConfiguration(fileMap, 
        ConfigurationUserLevel.None);

    // Loop to get the sections. Display basic information.
    Console.WriteLine("Name, Allow Definition");
    int i = 0;
    foreach (ConfigurationSection section in config.Sections)
    {
        Console.WriteLine(
            section.SectionInformation.Name + "\t" +
        section.SectionInformation.AllowExeDefinition);
        i += 1;

    }
    Console.WriteLine("[Total number of sections: {0}]", i);

    // Display machine.config path.
    Console.WriteLine("[File path: {0}]", config.FilePath);
}

تحرير:هذا ينبغي أن إخراج "myKey" القيمة:

ExeConfigurationFileMap fileMap =
    new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = 
    @"C:\test\ConfigurationManager.exe.config";
System.Configuration.Configuration config =
    ConfigurationManager.OpenMappedExeConfiguration(fileMap, 
    ConfigurationUserLevel.None);
Console.WriteLine(config.AppSettings.Settings["MyKey"].Value);

أعتقد أن ما تبحث عنه هو:

System.Configuration.ConfigurationManager.OpenExeConfiguration(string path)

أود الثانية Gishu نقطة أن هناك طريقة أخرى.لن يكون من الأفضل أن abstact المشتركة/"العامة" جزء من EXE إلى DLL إنشاء المجمع EXE لتشغيل ؟ هذا هو بالتأكيد أكثر من المعتاد نمط التنمية.فقط الأشياء التي كنت ترغب في أن تستهلك من شأنها أن تذهب إلى DLL و EXE أن تفعل كل الأشياء هو عليه حاليا ، ناقص ما ذهب إلى DLL.

إنه ملف xml يمكنك استخدام Linq-XML أو دوم النهج القائمة على تحليل من المعلومات ذات الصلة.
(إلى أن قال أود السؤال إذا لم يكن هناك أفضل تصميم مهما كان..كنت تحاول تحقيق.)

إضافة وصلة في IDE سوف تساعد فقط خلال التنمية.أعتقد lomaxx لديه فكرة الحق: System.Configuration.ConfigurationManager.OpenExeConfiguration.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top