التفريق شبكة الإنترنت.التكوين بين ديف التدريج بيئات الإنتاج

StackOverflow https://stackoverflow.com/questions/1406157

سؤال

أي شخص لديه أي نصائح جيدة على التعامل مع الاختلافات في شبكة الإنترنت.إعدادات التكوين بين والبيئات ؟ لقد فكرت في إنشاء 'config' مجلد في المصدر نظام التحكم ولكن خارج الشبكة الهرمي ، وبعد نشر عملية نسخ ملفات التكوين (على شبكة الإنترنت.dev.التكوين,على شبكة الإنترنت.التدريج.التكوين, على شبكة الإنترنت.إنتاج.التكوين) إلى مجلد ويب على النشر.رأيت أيضا المشاركات على كيفية برمجيا تغيير إعدادات التكوين (WCF النهاية, سلاسل اتصال ، إلخ) عندما يبدأ التطبيق.

ما يعتبر أفضل الممارسات هنا و ما هي التجارب وقد كان الجميع مع هذه أو غيرها من يقترب ؟

تحديث سبتمبر 2010

ومن الجدير بالذكر أن Visual Studio 2010 يضيف هذه القدرة عن طريق ويب.التكوين يحول.عند استخدام بناء إدارة تكوين (بناء|مدير التكوين...) لخلق تكوينات مختلفة للمشروع الخاص بك (أقول, التصحيح, Dev, التدريج Release) مقابل يضيف شبكة الإنترنت.*.ملفات التكوين إلى الحل.ويب الافتراضي.config يحتوي على الأساس الإعدادات التي سوف تستخدم من أجل التصحيح.ويب.الإصدار.التكوين, على شبكة الإنترنت.التدريج.التكوين ، وما إلى ذلك تحتوي على XSLT يحول التي سيتم تطبيقها كلما قمت بنشر المشروع على أساس الفعالة في بناء التكوين.

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

المحلول

مع الجديد VS يمكنك استخدام web config التحولات.

اقرأ المزيد هنا: http://msdn.microsoft.com/en-us/library/dd465326.aspx

نصائح أخرى

توجهي كان لديك عدة ملفات التكوين.وضعت كل بيئة الملحد الأشياء (أيلا يهم إذا ديف, انطلاق, أو الإنتاج) في شبكة الإنترنت.ملف التكوين.أي شيء غير محددة البيئة (أياتصال قاعدة البيانات معلومات تسجيل تصحيح إعدادات, الخ.) أنا وضعت في المحلية.config محددة للبيئة.ثم يمكنك إدراج المحلية.إعدادات التكوين في شبكة الإنترنت.التكوين باستخدام configSource (http://weblogs.asp.net/fmarguerie/archive/2007/04/26/using-configsource-to-split-configuration-files.aspx)

ويب.config ثم يمكن فحص إلى عنصر تحكم مصدر.لا تحقق في المحلية.ملفات التكوين - أن يجبرك على نشر الصحيح في نشر النصوص.

يمكنني استخدام CruiseControl.NET/NAnt و نانت لديه XMLPoke المهمة التي تسمح لك أن تذهب في كما كنت بناء وتغيير أي التكوين الإعداد باستخدام استعلامات XPath.

وذلك في كل من بلدي بناء الأهداف (ديف ضد التعذيب ، التدريج إلخ) أنا وضعت مجموعة من الخصائص ومن ثم استدعاء الماجستير بناء الهدف.ماجستير بناء الهدف تأخذ القيم من جميع خصائص XMLPokes لهم في التكوين و يبني.

أسلوب واحد رأيت استخدامها حيث يمكنك إعداد مفاتيح داخل الويب الخاص بك.التكوين إلى التفريق بين أجهزة الكمبيوتر عن طريق الاسم.

هكذا على سبيل المثال:

<add key="comp1.Environment"       value="DEV"/>
<add key="compdb1.Environment"     value="PROD"/>
<add key="compstage.Environment"    value="STAGE"/>

من الواضح comp1, compdb1 الفعلية أسماء أجهزة الكمبيوتر.

يمكنك ثم الإعداد شيئا مثل:

<add key="KeyName,DEV"   value="DevEnvironmentValue"/>

في التعليمات البرمجية الخاصة بك سوف تحتاج إلى التحقق من ما بيئة تشغيل التطبيق ثم الحصول على المفتاح المناسب ، وذلك على سبيل المثال.

private string GetKeyValue() {
    string machineName  = String.Concat(System.Environment.MachineName, ".Environment");
    string environment  = ConfigurationManager.AppSettings[machineName];
    string key          = String.Concat("KeyName", ",", environment);
    string keyValue       = ConfigurationManager.AppSettings[key];

    return keyValue;
}

هناك نوع المشروع اسمه نشر ويب المشروع, متاحة مجانا من مايكروسوفت التي تسمح لك أن تفعل ذلك بالضبط.يمكنك استبدال أقسام الويب الخاص بك.التكوين ، اعتمادا على الحل التكوين (تصحيح الإصدار.... الخ) نستخدم هذا منذ أكثر من عام وأنها تعمل بشكل جيد.أنها متاحة VS2005 و VS2008.

نأمل أن يكون هذا سوف يساعد

في حين أن بعض من إجابات أخرى قد تكون أكثر ملاءمة أنا أضيف أن مات Berseth توالت طريقته الخاصة مرة أخرى في عام 2007...

باختصار انه يحتفظ كل القيم التي تختلف بين البيئات في الملكية ملف نصي و يستخدم أداة مخصصة أثناء عملية الإنشاء دمج القيم في .ملفات التكوين.

في تعليق على هذا المنصب دورون Yaacoby أيضا تعليقات:

"هناك مهمة في المجتمع MSBuild المهام التي يمكن تحقيق ذلك (وأكثر) بالنسبة لك, وهو ما يسمى XmlMassUpdate. لقد كتبت حول هذا الموضوع في مدونتي"

هنا كيفية إضافة مختلف التكوينات التي يمكن تخصيصها نشر البيئات في VS2012

  1. انقر بزر الماوس الأيمن على حل وحدد مدير التكوين
  2. انقر فوق إدارة تكوين زر
  3. في إطار التكوين عمود حدد مربع التحرير والسرد ضد المشروع أن كنت ترغب في إضافة التكوين و تحديد
  4. إنشاء تكوين جديد مع اسم مثل اختبار إعدادات النسخ من الإفراج التحقق من خلق جديد حل تكوينات مربع
  5. انقر بزر الماوس الأيمن على شبكة الإنترنت.التكوين
  6. إضافة التكوين تحويل
  7. ثم يمكنك الحصول على إضافية على شبكة الإنترنت.التكوين على سبيل المثال على شبكة الإنترنت.الاختبار.التكوين

بعد هذا تحتاج إلى تعديل شبكة الإنترنت.الاختبار.التكوين مع بعض التحولات الخاصة بيئة اختبار

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

 Easy way to have that is having an Enumeration , then having a switch statement based on the server name ( if its stable name ) .  
 Call GetURIPath() where ever you require to fetch details , here I given the examples for url's used 


public class StaticData
{
    public enum enumEnvironment
    {
        envNONE = 0,
        envLOC = 1,
        envDEV = 2,
        envTEST = 3,
        envPROD = 4
    }
     private static enumEnvironment GetCurrentEnv()
    {
        if (ConfigurationManager.GetSection("DBSettingsGroup/DBSettings") == null && ConfigurationManager.GetSection("DBSettings") == null)
        {
            return enumEnvironment.envLOC;
        }
        else
        {
            NameValueCollection NVCollection = new NameValueCollection();
            NVCollection = (NameValueCollection)ConfigurationManager.GetSection("DBSettingsGroup/DBSettings");
            if(NVCollection == null)
            {
                NVCollection = (NameValueCollection)ConfigurationManager.GetSection("DBSettings");
            }

            string sEnv = NVCollection.GetValues("serverrole").ToString();

            switch (sEnv.ToUpper())
            {
                case "DEV-ISOLATED":
                    return enumEnvironment.envDEV;
                case "DEVELOPMENT":
                    return enumEnvironment.envDEV;
                case "TEST":
                    return enumEnvironment.envTEST;
                case "PRODUCTION":
                    return enumEnvironment.envPROD;
                default:
                    return enumEnvironment.envNONE;
            }
        }
    }
   public static string GetURIPath()
    {
        switch (GetCurrentEnv())
        {
            case enumEnvironment.envPROD:
                return "http://produrl/yourapp/api/";
            case enumEnvironment.envTEST:
                return "http://testurl/yourapp/api/";
            case enumEnvironment.envDEV:
                return "http://devurl/yourapp/api/";
            default:
                return "http://localhost/yourapp/api/";
        }
    }

}

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