asp.net Web.Config रूपांतरण का उपयोग कर उन्नत कार्य




visual-studio-2010 web-config (2)

एक अपडेट के रूप में, यदि आप विजुअल स्टूडियो 2013 का उपयोग कर रहे हैं, तो आपको इसके बजाय% प्रोग्राम फ़ाइलें (x86)% MSBuild \ Microsoft \ VisualStudio \ v12.0 \ Web \ Microsoft.Web.XmlTransform.dll का संदर्भ देना चाहिए।

क्या किसी को पता है कि पूरे मूल्य या विशेषता को बदलने के बजाय मूल्यों के विशिष्ट वर्गों को "रूपांतरित" करने का कोई तरीका है या नहीं?

उदाहरण के लिए, मेरे पास कई ऐप सेटिंग्स प्रविष्टियां हैं जो विभिन्न वेबसाइसेस के लिए यूआरएल निर्दिष्ट करती हैं। ये प्रविष्टियां उत्पादन पर्यावरण की तुलना में देव पर्यावरण में थोड़ा अलग हैं। कुछ दूसरों की तुलना में कम तुच्छ हैं

<!-- DEV ENTRY -->
<appSettings>
 <add key="serviceName1_WebsService_Url" value="http://wsServiceName1.dev.domain.com/v1.2.3.4/entryPoint.asmx" />
 <add key="serviceName2_WebsService_Url" value="http://ma1-lab.lab1.domain.com/v1.2.3.4/entryPoint.asmx" />
</appSettings>

<!-- PROD ENTRY -->
<appSettings>
 <add key="serviceName1_WebsService_Url" value="http://wsServiceName1.prod.domain.com/v1.2.3.4/entryPoint.asmx" />
 <add key="serviceName2_WebsService_Url" value="http://ws.ServiceName2.domain.com/v1.2.3.4/entryPoint.asmx" />
</appSettings>

ध्यान दें कि मुट्ठी प्रविष्टि पर, ".prod" से ".dev" केवल अंतर है दूसरी प्रविष्टि पर, सबडोमेन अलग है: "ws.ServiceName2" से "ma1 - lab.lab1"

अब तक, मुझे पता है कि मैं वेब में ऐसा कुछ कर सकता हूं। कृपया। कॉन्फिग:

<add xdt:Locator="Match(key)" xdt:Transform="SetAttributes(value)" key="serviceName1_WebsService_Url" value="http://wsServiceName1.prod.domain.com/v1.2.3.4/entryPoint.asmx" />
<add xdt:Locator="Match(key)" xdt:Transform="SetAttributes(value)" key="serviceName2_WebsService_Url" value="http://ws.ServiceName2.domain.com/v1.2.3.4/entryPoint.asmx" />

हालांकि, हर बार उस webservice के लिए संस्करण अपडेट किया गया है, मुझे वेब को अपडेट करना होगा। कृपया। कॉन्फिग भी, जो मेरे web.config अपडेट को सरल बनाने के उद्देश्य को हरा देता है।

मुझे पता है कि मैं उस यूआरएल को विभिन्न वर्गों में भी विभाजित कर सकता हूं और उन्हें स्वतंत्र रूप से अपडेट कर सकता हूं, लेकिन मेरे पास यह सब एक कुंजी में है।

मैंने उपलब्ध वेब.कॉन्फिग ट्रांसफॉर्म को देखा है लेकिन नोटिंग्स को टॉवर के रूप में देखा जा रहा है जो मैं पूरा करने की कोशिश कर रहा हूं।

ये वे वेबसाइट हैं जिन्हें मैं संदर्भ के रूप में उपयोग कर रहा हूं:

विशाल जोशी का ब्लॉग , एमएसडीएन हेल्प , और चैनल 9 वीडियो

कोई भी सहायताकाफी प्रशंसनीय होगी!

डी


वास्तव में आप यह कर सकते हैं, लेकिन यह उतना आसान नहीं है जितना आप सोच सकते हैं। आप अपना स्वयं का कॉन्फ़िगरेशन रूपांतरण बना सकते हैं। मैंने इस बारे में http://sedodream.com/2010/09/09/ExtendingXMLWebconfigConfigTransformation.aspx पर एक बहुत ही विस्तृत ब्लॉग पोस्ट लिखा है। लेकिन यहां हाइटलाइट्स हैं:

  • कक्षा पुस्तकालय परियोजना बनाएँ
  • संदर्भ वेब। प्रकाशन .asks.dll (% प्रोग्राम फ़ाइलों के अंतर्गत (x86)% MSBuild \ Microsoft \ VisualStudio \ v10.0 \ वेब फ़ोल्डर)
  • माइक्रोसॉफ्ट.Web.Publishing.Tasks.Transform कक्षा बढ़ाएं
  • लागू () विधि लागू करें
  • असेंबली को एक प्रसिद्ध स्थान पर रखें
  • Xdt का उपयोग करें: नया ट्रांसफॉर्म उपलब्ध कराने के लिए आयात करें
  • परिवर्तन का प्रयोग करें

यहां यह वर्ग है जिसे मैंने प्रतिस्थापित करने के लिए बनाया है

namespace CustomTransformType
{
    using System;
    using System.Text.RegularExpressions;
    using System.Xml;
    using Microsoft.Web.Publishing.Tasks;

    public class AttributeRegexReplace : Transform
    {
        private string pattern;
        private string replacement;
        private string attributeName;

        protected string AttributeName
        {
            get
            {
                if (this.attributeName == null)
                {
                    this.attributeName = this.GetArgumentValue("Attribute");
                }
                return this.attributeName;
            }
        }
        protected string Pattern
        {
            get
            {
                if (this.pattern == null)
                {
                    this.pattern = this.GetArgumentValue("Pattern");
                }

                return pattern;
            }
        }

        protected string Replacement
        {
            get
            {
                if (this.replacement == null)
                {
                    this.replacement = this.GetArgumentValue("Replacement");
                }

                return replacement;
            }
        }

        protected string GetArgumentValue(string name)
        {
            // this extracts a value from the arguments provided
            if (string.IsNullOrWhiteSpace(name)) 
            { throw new ArgumentNullException("name"); }

            string result = null;
            if (this.Arguments != null && this.Arguments.Count > 0)
            {
                foreach (string arg in this.Arguments)
                {
                    if (!string.IsNullOrWhiteSpace(arg))
                    {
                        string trimmedArg = arg.Trim();
                        if (trimmedArg.ToUpperInvariant().StartsWith(name.ToUpperInvariant()))
                        {
                            int start = arg.IndexOf('\'');
                            int last = arg.LastIndexOf('\'');
                            if (start <= 0 || last <= 0 || last <= 0)
                            {
                                throw new ArgumentException("Expected two ['] characters");
                            }

                            string value = trimmedArg.Substring(start, last - start);
                            if (value != null)
                            {
                                // remove any leading or trailing '
                                value = value.Trim().TrimStart('\'').TrimStart('\'');
                            }
                            result = value;
                        }
                    }
                }
            }
            return result;
        }

        protected override void Apply()
        {
            foreach (XmlAttribute att in this.TargetNode.Attributes)
            {
                if (string.Compare(att.Name, this.AttributeName, StringComparison.InvariantCultureIgnoreCase) == 0)
                {
                    // get current value, perform the Regex
                    att.Value = Regex.Replace(att.Value, this.Pattern, this.Replacement);
                }
            }
        }
    }
}

यहां web.config है

<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="one" value="one"/>
    <add key="two" value="partial-replace-here-end"/>
    <add key="three" value="three here"/>
  </appSettings>
</configuration>

यहां मेरी कॉन्फ़िगरेशन फ़ाइल है

<?xml version="1.0"?>

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">

  <xdt:Import path="C:\Program Files (x86)\MSBuild\Custom\CustomTransformType.dll"
              namespace="CustomTransformType" />

  <appSettings>
    <add key="one" value="one-replaced" 
         xdt:Transform="Replace" 
         xdt:Locator="Match(key)" />
    <add key="two" value="two-replaced" 
         xdt:Transform="AttributeRegexReplace(Attribute='value', Pattern='here',Replacement='REPLACED')" 
         xdt:Locator="Match(key)"/>
  </appSettings>
</configuration>

परिवर्तन के बाद परिणाम यहां दिया गया है

<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="one" value="one-replaced"/>
    <add key="two" value="partial-replace-REPLACED-end"/>
    <add key="three" value="three here"/>
  </appSettings>
</configuration>






web-deployment