سؤال

في مشروع .NET، لنفترض أن لديك إعداد تكوين - مثل سلسلة اتصال - مخزنة في ملف app.config، والذي يختلف بالنسبة لكل مطور في فريقك (قد يستخدمون خادم SQL محلي، أو مثيل خادم محدد أو باستخدام خادم بعيد، وما إلى ذلك).

كيف يمكنك هيكلة الحل الخاص بك بحيث يمكن لكل مطور أن يكون لديه "تفضيلات" التطوير الخاصة به (أي:لم يتم التحقق منها في التحكم بالمصدر)، ولكن قم بتوفير سلسلة اتصال افتراضية تم التحقق منها في التحكم بالمصدر (وبالتالي توفير الإعدادات الافتراضية الصحيحة لعملية الإنشاء أو المطورين الجدد).


يحرر:يمكن لل "file" الطريقة التي اقترحها @ Jonathon يمكن استخدامها بطريقة ما مع connectionStrings قسم؟

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

المحلول

يمكن تجاوز إعدادات AppSettings بملف محلي:

<appSettings file="localoveride.config"/>

وهذا يسمح لكل مطور بالاحتفاظ بالإعدادات المحلية الخاصة به.

فيما يتعلق بسلسلة الاتصال، في عالم مثالي، يجب على جميع المطورين الاتصال بقاعدة بيانات اختبارية، وليس تشغيل SQL Server لكل منهم.

ومع ذلك، فقد وجدت أنه من الأفضل الاحتفاظ بملف يسمى Web.Config.Prd في التحكم بالمصادر، واستخدامه في عمليات نشر الإنشاء.إذا قام شخص ما بتعديل web.config، فيجب عليه أيضًا إضافة التغيير إلى ملف .PRD...لا توجد أتمتة جيدة هناك :(

نصائح أخرى

يحرر:هل يمكن استخدام طريقة "الملف" المقترحة بواسطة jonathon باستخدام قسم ConnectionStrings؟

أو يمكنك الحصول على سلاسل اتصال متعددة في ملف التكوين المحدد، واستخدام مفتاح AppSettings لتحديد سلسلة الاتصال التي سيتم استخدامها.لدي ما يلي في قاعدة التعليمات البرمجية الخاصة بي لهذا الغرض:

public class ConnectionString
{
    public static string Default
    {
        get 
        { 
            if (string.IsNullOrEmpty(ConfigurationManager.AppSettings["DefaultConnectionStringName"]))
                throw new ApplicationException("DefaultConnectionStringName must be set in the appSettings");

            return GetByName(ConfigurationManager.AppSettings["DefaultConnectionStringName"]);
        }
    }

    public static string GetByName(string dsn)
    {
        return ConfigurationManager.ConnectionStrings[dsn].ConnectionString;
    }
}

أقوم دائمًا بإنشاء قوالب لملفات التكوين الخاصة بي.

كمثال أستخدم NAnt لبناء مشاريعي.لدي ملف تم إيداعه يسمى local.properties.xml.template.سوف يقوم إصدار NAnt الخاص بي بتحذير المطور في حالة عدم وجود local.properties.xml.داخل هذا الملف سيكون هناك إعدادات خاصة بمحطة العمل.سيتم فحص القالب في التحكم بالمصادر، لكن التكوين الفعلي لن يكون كذلك.

أستخدم تصميمًا قديمًا تمامًا يعمل فقط.

  • /_Test__app.config
  • /_Prod__app.config
  • /app.config

ثم في البرنامج النصي nant الخاص بي، لدي مهمة تقوم بنسخ بيئة البناء الحالية بالإضافة إلى _ app.config ونسخها إلى app.config.

إنه أمر سيئ، ولكن لا يمكنك الدخول بين مقدمي الخدمة وConfigurationManager لتزييفه، من خلال القول بأن مقدمي الخدمة ينظرون إلى سلسلة اتصال "dev" أو "prod" ولديهم فقط 3 سلاسل اتصال مسماة.

مهمة نانت:

<target name="copyconfigs" depends="clean">
  <foreach item="File" property="filename" unless="${string::get-length(ConfigPrefix) == 0}">
   <in>
     <items>
       <include name="**/${ConfigPrefix}App.config" />
       <include name="**/${ConfigPrefix}connectionstrings.config" />
       <include name="**/${ConfigPrefix}web.config" />
     </items>
   </in>
   <do>
    <copy overwrite="true" file="${filename}" tofile="${string::replace(filename, ConfigPrefix,'')}" />
   </do>
  </foreach></target>

هل يمكن استخدام طريقة "الملف" التي اقترحهاJonathon بطريقة ما مع قسم سلاسل الاتصال؟

لا، ولكن لا يوجد ما يمنعك من تخزين ConnectionString كمفتاح AppSettings.

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