Web.Config डीबग / रिलीज़


82

मुझे पता है कि Visual Studio 2010 में web.config डिबग मोड से रिलीज़ मोड में डेटाबेस से स्विच करने की क्षमता प्रदान करता है।

यहाँ मेरा Web.Release.config है:

<?xml version="1.0"?>

<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->

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

  <connectionStrings>
    <add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true"
      providerName="System.Data.SqlClient" />
    <add name="Testing1" connectionString="Data Source=test;Initial Catalog=TestDatabase;Integrated Security=True"
      providerName="System.Data.SqlClient" />
  </connectionStrings>

  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
  </system.web>

</configuration>

यहाँ मेरा Web.Debug.config कोड है:

<?xml version="1.0"?>

<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->

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

  <connectionStrings>
    <add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true"
      providerName="System.Data.SqlClient" />
    <add name="Live1" connectionString="Data Source=Live;Initial Catalog=LiveDatabase;Integrated Security=True"
      providerName="System.Data.SqlClient" />
  </connectionStrings>

  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
  </system.web>

</configuration>

और यह मेरा Web.config कोड है:

<?xml version="1.0"?>

<!-- For more information on how to configure your ASP.NET application, please visit http://go.microsoft.com/fwlink/?LinkId=169433 -->
<configuration>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />

    <authentication mode="Forms">
       <forms loginUrl="~/Account/Login.aspx" timeout="2880" />
    </authentication>

    <membership>
       <providers>
          <clear/>
          <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices"
         enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
         maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
         applicationName="/" />
       </providers>
    </membership>

    <profile>
       <providers>
          <clear/>
          <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/"/>
       </providers>
    </profile>

    <roleManager enabled="false">
       <providers>
          <clear/>
          <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
    <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
       </providers>
    </roleManager>

  </system.web>

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
</configuration>

जब मैं अपने प्रोजेक्ट को प्रकाशित करता हूं तो मेरे Web.config फ़ाइल में कुछ भी नहीं दिख रहा है। यह मेरा लाइव डेटाबेस कनेक्शन स्ट्रिंग नहीं दिखा रहा है?

जवाबों:


131

Web.config रूपांतरित करता है जो Visual Studio 2010 का एक भाग है, वर्तमान Web.config फ़ाइल को ".ebug या .Release संस्करण" में बदलने के लिए XSLT का उपयोग करता है।

अपने .Debug / .Release फ़ाइलों में, आपको अपने कनेक्शन स्ट्रिंग फ़ील्ड में निम्न पैरामीटर जोड़ने की आवश्यकता है:

xdt:Transform="SetAttributes" xdt:Locator="Match(name)"

यह प्रत्येक कनेक्शन स्ट्रिंग लाइन को मिलान नाम खोजने और तदनुसार विशेषताओं को अपडेट करने का कारण बनेगा।

नोट: आपको बदलने वाली फ़ाइलों में अपने प्रदातानाम पैरामीटर को अपडेट करने के बारे में चिंता करने की ज़रूरत नहीं है, क्योंकि वे बदलते नहीं हैं।

यहां मेरा एक ऐप से एक उदाहरण है। यहाँ web.config फ़ाइल अनुभाग है:

<connectionStrings>
      <add name="EAF" connectionString="[Test Connection String]" />
</connectionString>

और यहाँ web.config.release उचित परिवर्तन कर रहा है:

<connectionStrings>
      <add name="EAF" connectionString="[Prod Connection String]"
           xdt:Transform="SetAttributes"
           xdt:Locator="Match(name)" />
</connectionStrings>

एक जोड़ा नोट: रूपांतरण केवल तब होता है जब आप साइट प्रकाशित करते हैं, तब नहीं जब आप इसे केवल F5 या CTRL + F5 के साथ चलाते हैं। यदि आपको किसी दिए गए कॉन्फ़िगरेशन के खिलाफ स्थानीय रूप से अपडेट चलाने की आवश्यकता है, तो आपको इसके लिए अपनी Web.config फ़ाइल को मैन्युअल रूप से बदलना होगा।

अधिक जानकारी के लिए आप MSDN प्रलेखन देख सकते हैं

https://msdn.microsoft.com/en-us/library/dd465326(VS.100).aspx


20
क्या आप एक नोट जोड़ सकते हैं कि यह उत्तर देने के लिए F5 समय प्रकाशित समय में होता है? जाहिरा तौर पर मैं 2 घंटे के लिए यह सही था, लेकिन इसका एहसास नहीं हुआ।
पॉल

मैं विज़ुअल स्टूडियो ऑनलाइन कंटिन्यूअस बिल्ड के साथ यह काम कैसे कर सकता हूँ? मैं चाहता हूं कि यह मेरे Web.Config को बदलने और Azure को परिनियोजित करने के लिए बदल दे।
रोजडी कासिम

1
@RosdiKasim - मुझे यकीन नहीं है कि यह विज़ुअल स्टूडियो के लिए ऑनलाइन 100% तक मेल खाएगा, लेकिन जब मुझे एक विशिष्ट परियोजना (यदि मेरे पास कई हैं) को तैनात करने या एक अलग बिल्ड का उपयोग करने की आवश्यकता है (और इस प्रकार रूपांतर) मैं सीधे चीजों को निर्दिष्ट करता हूं Azure वेबसाइट का उदाहरण। यहाँ कुछ विवरण मैंने उस पर लिखा है: कुछ समय पहले: freshconsulting.com/…
Dillie-O

यहाँ MSDN के लिए एक लिंक दिया गया है जो इसे विवरण में बताती है msdn.microsoft.com/en-us/library/dd465326(VS.100).aspx
Hakan Fıstık

1
वीएस में F5 बनाम प्रकाशन के माध्यम से साइट चलाने के संबंध में आपका जोड़ा गया नोट मेरे लिए बहुत उपयोगी था।
डेनिस एम। रसोई

8

ConfigTransformNuget पैकेज के रूप में उपलब्ध बिल्ड लक्ष्य का उपयोग करना संभव है - https://www.nuget.org/packages/CodeAssassin.ConfigTransform/

सभी "वेब। * .Config" ट्रांसफ़ॉर्म फाइल्स को ट्रांसफ़ॉर्म किया जाएगा और आउटपुट को "वेब। *। config.transformed" फ़ाइलों के रूप में बिल्ड आउटपुट डायरेक्टरी में चुने गए बिल्ड कॉन्फ़िगरेशन की परवाह किए बिना किया जाएगा।

गैर-वेब परियोजनाओं में फ़ाइलों को बदलने के लिए "ऐप। *। कॉन्फिगर" पर लागू होता है।

और फिर निम्नलिखित लक्ष्य को अपने साथ जोड़ रहा है *.csproj

<Target Name="TransformActiveConfiguration" Condition="Exists('$(ProjectDir)/Web.$(Configuration).config')" BeforeTargets="Compile" >
    <TransformXml Source="$(ProjectDir)/Web.Config" Transform="$(ProjectDir)/Web.$(Configuration).config" Destination="$(TargetDir)/Web.config" />
</Target>

इसका उत्तर पोस्ट करना क्योंकि यह पहला स्टैकओवरफ़्लो पोस्ट है जो इस विषय पर Google में दिखाई देता है।


इस महान विधि ने मेरे लिए असाधारण काम किया, हालाँकि मुझे आपके द्वारा बताए गए कॉन्फ़िगरट्रांसफॉर्म को स्थापित करने की आवश्यकता नहीं थी (जो हमेशा सभी कॉन्फ़िगरेशन को बदल देता है) - मैं सिर्फ विजुअल स्टूडियो पर सक्रिय बिल्ड कॉन्फ़िगरेशन सेट करता हूं (जैसे मैं इसे डीबग करने के लिए बदलता हूं), समाधान का निर्माण करता हूं देखा!
बॉर्नटूकोड

5

विकास कार्य में परिवर्तन कार्य करने के लिए (F5 या CTRL + F5 का उपयोग करके) मैं पैकेज फ़ोल्डर (संकुल \ configTransform \ ctt.exe) में ctt.exe ( https://ctt.codeplex.com/ ) ड्रॉप करता हूँ ।

तब मैं विजुअल स्टूडियो में प्री-या पोस्ट-बिल्ड इवेंट रजिस्टर करता हूं ...

$(SolutionDir)packages\ConfigTransform\ctt.exe source:"$(ProjectDir)connectionStrings.config" transform:"$(ProjectDir)connectionStrings.$(ConfigurationName).config" destination:"$(ProjectDir)connectionStrings.config"
$(SolutionDir)packages\ConfigTransform\ctt.exe source:"$(ProjectDir)web.config" transform:"$(ProjectDir)web.$(ConfigurationName).config" destination:"$(ProjectDir)web.config"

परिवर्तनों के लिए मैं SlowCheeta VS एक्सटेंशन ( https://visualstudiogallery.msdn.microsoft.com/69023d00-a4f9-4a34-a6cd-7e854ba318b5 ) का उपयोग करता हूं ।


1
सफेद रिक्त स्थान को संरक्षित करने के लिए (ट्रांसफ़ॉर्म किए गए कॉन्फ़िगर को एक पंक्ति में होने से रोकता है) प्रीस्चर्वव्इटस्पेस इंडेंट इन्चर्स जोड़ें: "" कमांड लाइन पर। $(SolutionDir)packages\ConfigTransform\ctt.exe source:"$(ProjectDir)connectionStrings.config" transform:"$(ProjectDir)connectionStrings.$(ConfigurationName).config" destination:"$(ProjectDir)connectionStrings.config" preservewhitespace indent IndentChars:" "
इमानुएल निल्सन

3

यदि आप उत्पादन परिवेश के लिए समाचार कनेक्शन के सभी कनेक्शन स्ट्रिंग्स को बदलने जा रहे हैं , तो आप इस सिंटैक्स का उपयोग करके सभी कनेक्शन स्ट्रिंग्स को प्रोडक्शन वाले से बदल सकते हैं:

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

<connectionStrings xdt:Transform="Replace">
    <!-- production environment config --->
    <add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true"
      providerName="System.Data.SqlClient" />
    <add name="Testing1" connectionString="Data Source=test;Initial Catalog=TestDatabase;Integrated Security=True"
      providerName="System.Data.SqlClient" />
</connectionStrings>
....

इस उत्तर के लिए जानकारी इस उत्तर और इस ब्लॉग पोस्ट से लाई गई है ।

सूचना : जैसा कि अन्य लोगों ने पहले ही समझाया था, यह सेटिंग केवल तभी लागू होगी जब एप्लिकेशन प्रकाशित नहीं हो रहा हो / इसे डीबग करना (F5 मारकर)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.