मैं अंतर्निहित विज़ुअल स्टूडियो डीबगर सर्वर में Web.debug.config का उपयोग कैसे कर सकता हूं?


80

मैं Web.debug.configदृश्य स्टूडियो 2010 में निर्मित डिबगर में विलय और उपयोग कैसे कर सकता हूं ?

जवाबों:


92

यह एक ज्ञात बग है। उस सुविधा का उपयोग अभी केवल परिनियोजन प्रक्रिया के भाग के रूप में किया जा सकता है।

https://connect.microsoft.com/VisualStudio/feedback/details/523221/have-web-debug-config-apply-during-development

कृपया इसे बढ़ाएं, यदि आप भी इसका सामना करते हैं, तो यह एएसएपी तय किया जाएगा।


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

26
वैसे मेरे लिए यह एक बग है, अन्यथा एक स्थानीय पर्यवेक्षक पर डिबग / रिलीज़ परिवर्तन का उद्देश्य क्या है? कभी-कभी डिजाइन गलत होते हैं, इसका मतलब यह नहीं है कि यह सही है :)
लिपियों के भगवान

4
समस्या तब आती है जब आप Github का उपयोग करते हैं और सिंक करते समय web.config को अनदेखा करने की आवश्यकता होती है। लेकिन यह एक बैक अप होने के उद्देश्य को हरा देता है - मेरा मतलब है कि मैं जीथब का उपयोग करता हूं। अब AppHarbor को परिदृश्य में जोड़ें और आपको दो प्रकार की web.config फ़ाइलों का समर्थन करना होगा, क्योंकि आप चाहते हैं कि आपकी एपाइक जीथब पर प्रकाशित हो, इसलिए आपको सिंक और प्रकाशन से पहले अपने कॉन्फ़िगरेशन में मानों को प्रतिस्थापित करना होगा। यह एक समस्या है। गलती से अपने मूल्यों को विन्यास और सिंक में स्थान देना भूल जाओ, और अनुमान लगाओ कि क्या? आपकी क्षमायाचना केवल एक सार्वजनिक भंडार में बनाई गई है। Yikes, क्या समस्या है।
डेविड रोबिन्स

8
एमएस कनेक्ट का लिंक टूट गया है
माइकल फ्रीजिम

17
@LordofScripts: जब एक बग बंद हो जाता है "जैसा कि डिज़ाइन किया गया है" मैं कभी-कभी कहना चाहता हूं "तो आपके डिजाइन में एक बग है!"
रॉय टिंकर

34

यह वास्तव में करने के लिए काफी सरल है और, इस पर विश्वास करें या न करें, ऐसा लगता है कि यह वीएस के काम करने के लिए डिज़ाइन किया गया है।

वेब की .config सम्‍मिलित परियोजना के .csproj फ़ाइल के समापन "प्रोजेक्ट" टैग से ठीक पहले निम्नलिखित पंक्तियों को शब्दशः जोड़ें।

<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />
<Target Name="Transform">
    <MakeDir Directories="obj\$(Configuration)" Condition="!Exists('obj\$(Configuration)')" />
    <TransformXml Source="Web.Config" Transform="Web.$(Configuration).config" Destination="obj\$(Configuration)\Web.config" StackTrace="true" />
</Target>

प्रोजेक्ट की प्रोजेक्ट संपत्तियों में पोस्ट-बिल्ड ईवेंट के लिए निम्न पंक्तियाँ रखें, जिसमें web.config फ़ाइल हो। प्रत्येक बिल्ड कॉन्फ़िगरेशन के लिए ऐसा करें जिसे आप बदलना चाहते हैं।

"$(MSBUILDBINPATH)\msbuild" "$(ProjectPath)" /t:Transform /p:Configuration=$(ConfigurationName);Platform=AnyCPU
xcopy "$(ProjectDir)obj\$(ConfigurationName)\Web.Config" "$(ProjectDir)". /F /R /Y

1
यदि आपके प्रोजेक्ट पथ में रिक्त स्थान है, तो त्रुटियों से बचने के लिए मैं केवल $ (ProjectDir) और $ (ProjectPath) के आसपास दोहरे उद्धरण जोड़ने की सलाह दूंगा।
अलेक्जेंडर प्रोकोफयेव

1
यह उपयोग <लक्ष्य का नाम = "BeforeBuild"> करने के लिए बेहतर है, यह में सुझाव दिया गया था के रूप में stackoverflow.com/a/10506476/52277
माइकल Freidgeim

मैं इस दृष्टिकोण का उपयोग कर काम करने के लिए ट्रांसफ़ॉर्म प्राप्त करने में सक्षम हूं लेकिन मैं अपने ब्रेकप्वाइंट को हिट करने में असमर्थ हूं। मेरे पास डीबग सेट करने के लिए सही है, लेकिन मैंने कभी भी ब्रेकपॉइंट नहीं मारा और मुझे निम्न संदेश मिला "ब्रेकपॉइंट वर्तमान में हिट नहीं होगा। इस दस्तावेज़ के लिए कोई प्रतीक नहीं लोड किए गए हैं।" यह केवल मेरे कस्टम कॉन्फ़िगरेशन के लिए होता है और यदि मैं "डिबग" में अपना कॉन्फ़िगरेशन सेट करता हूं तो यह ठीक काम करता है। कोई विचार?
मिथुन_दा

1
मुझे इसे काम करने के लिए $ (MSBUILDBINPATH) के आसपास दोहरे उद्धरण जोड़ना पड़ा, अन्यथा यह कोड 9009 के साथ बाहर निकलता
sotn

6
ध्यान दें कि यह मूल को बदल देता है Web.config, इसलिए आपके सभी परिवर्तनों को "निष्पादनीय" होना चाहिए ( किसी भी अन्य परिवर्तनों के परिणामों पर फिर से लागू किया जा सकता है )। यह आपको अपनी पवित्रता को बनाए रखने से भी रोकेगा, आपको फ़ाइल को स्रोत नियंत्रण में रखना चाहिए (जैसा कि आपको शायद करना चाहिए)। कुल मिलाकर एक "सरल" हैक जो समस्याओं के अगले सेट में जटिलता / दर्द को स्थानांतरित करता है। अच्छा है अगर आप इसे "बेहतर" कर सकते हैं, तो बुरा अगर आप नहीं करते हैं। वीएस संस्करण को हार्ड-कोडिंग के बजाय $ (विजुअलस्टडियोवर्जन) का उपयोग करने पर विचार करें (आप इसे बदलना भूल जाएंगे )।
tne

16

मैंने इसे सरल तरीके से, .csproj फ़ाइल के अंत में जोड़कर, टैग से ठीक पहले हल किया था। यह keitn के उत्तर के समान है, इस अंतर के साथ कि यह पोस्ट बिल्ड ईवेंट का उपयोग नहीं करता है।

<Target Name="BeforeBuild">
    <TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="Web.config" />
</Target>

3
पुष्टि की, यह काम करता है। लेकिन ध्यान रखें, यह Web.config की स्थानीय प्रति को संशोधित करता है। इसलिए यदि आप XSLT ट्रांसफॉर्मेशन को RemoveAttributes की तरह उपयोग कर रहे हैं, तो यह निश्चित रूप से हटा दिया गया है! अच्छी तरह से
सेटएट्यूएंटेस के

यह वही है जो मैं देख रहा था। सरल और सीधे मुद्दे पर। यह निश्चित नहीं है कि अन्य सभी समाधानों को इतना जटिल क्यों होना चाहिए ... जटिल।
डेविड कैरिगन

किसी को पता है कि इस कार्रवाई को <लक्ष्य नाम = "AfterBuild"> अनुभाग में पूर्ववत कैसे करें?
कैमरून बेल्ट

1
इसका उत्तर होना चाहिए।
कैमरून बेल्ट

2

मैं अपने प्रोजेक्ट में web.config को अपडेट नहीं करना चाहता था, जो कि बिन फ़ोल्डर में समाप्त होता है, इसलिए यहां बताया गया है कि मैंने यह कैसे किया।

.Csproj के अंत में निम्नलिखित जोड़ें (अंतिम समापन परियोजना टैग से ठीक पहले)

<Target Name="Transform">
    <MakeDir Directories="bin" Condition="!Exists('bin')" />
    <TransformXml Source="Web.Config" Transform="Web.$(Configuration).config" Destination="bin\$(TargetFileName).config" StackTrace="true" />
  </Target>

फिर निम्न पोस्ट बिल्ड स्टेप को जोड़ें

"$(MSBUILDBINPATH)\msbuild" "$(ProjectPath)" /t:Transform /p:Configuration=$(ConfigurationName);Platform=AnyCPU

इसका मतलब यह है कि जब आप ट्रांसफॉर्म का निर्माण करते हैं तो डिबग / रिलीज़ कॉन्फिग से लेकर WebsiteName.Config फ़ाइल में आउटपुट बिन डायरेक्टरी में होता है और इस तरह प्रोजेक्ट में मुख्य web.config के साथ हस्तक्षेप नहीं होता है।


2
यह बिन निर्देशिका में कॉन्फिगरेशन को रूपांतरित करता है, दुर्भाग्यवश यह कॉन्फिगरेशन कभी उपयोग नहीं किया जाता है। लोड किया गया कॉन्फिगरेशन वास्तव में प्रोजेक्ट फ़ोल्डर में Web.Config है, न कि बिन डायरेक्टरी में।
मिक

2

कई समान पोस्ट पढ़ने के बाद और फ़ाइलों को ओवरराइट या वेब नहीं होने के कारण समस्याएँ होने लगीं। वेबफिग सुलभ नहीं होने के कारण यह केवल इसलिए पढ़ा जाता है कि मुझे मेरे लिए काम करना चाहिए:

  <Target Name="BeforeBuild" Condition="$(Configuration) == 'MyAltDebugConfiguration'">
    <ItemGroup>
      <OriginalWebConfig Include="$(ProjectDir)Web.config"/>
      <TempWebConfig Include="$(ProjectDir)TempWeb.config"/>
    </ItemGroup>
    <Exec Command="&quot;$(DevEnvDir)tf.exe&quot; checkout &quot;$(ProjectDir)Web.config&quot;" />
    <Copy SourceFiles="@(OriginalWebConfig)" DestinationFiles="@(TempWebConfig)" />
    <TransformXml Source="$(ProjectDir)TempWeb.config"
                            Transform="Web.$(Configuration).config"
                            Destination="Web.config" />
  </Target>

टिप्पणियाँ:

यह FirstBuild लक्ष्य के रूप में चलता है।

मैं केवल यह चाहता हूं कि यह एक निश्चित कॉन्फ़िगरेशन (एक वैकल्पिक डिबग वातावरण) के तहत चले और इसलिए ही मेरी शर्त है। जब वेब के माध्यम से तैनाती प्रकाशन लक्ष्य को तैनात करता है और मुझे चलाने के लिए इस लक्ष्य की आवश्यकता नहीं होती है।

मैं web.config की जाँच करना याद रखना नहीं चाहता (केवल इसे पूरा करने के लिए जब मैं कर रहा हूँ) तो मैं web.config को बदलने से पहले जाँच करता हूँ। यदि आप TFS का उपयोग नहीं कर रहे हैं तो आप इस लाइन को हटा सकते हैं।

क्योंकि VS (2010) \ msbuild स्रोत web.config को जाने नहीं देना चाहता है मैं एक अस्थायी फ़ाइल का उपयोग करता हूं (जानकारी के लिए इस लेख के लिए धन्यवाद: http://www.diaryofaninja.com/blog/2011/09/ 14 / कस्टम-वेबकॉन्फिग-ट्रांसफॉर्मेशन-इन-एमएसबिल्ट का उपयोग करना )

मैंने TempWeb.config को हटाने के लिए एक कमांड जोड़ने की कोशिश की, लेकिन VS \ msbuild इसे जाने नहीं देना चाहता है। मैं इसके साथ रह सकता हूं क्योंकि यह टीएफएस में शामिल नहीं होता है।


मेरी यह त्रुटि है The command ""C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\tf.exe" checkout "C:\_Code\RTS\SCTimeSheet\Web.config"" exited with code 9009। कोई विचार?
Sky91

1

मुझे पता है कि यह पुराना है, लेकिन मैं उसी समस्या का सामना कर रहा हूं। हमारे पास डिफ़ॉल्ट Web.config से एंडपॉइंट, कनेक्शन स्ट्रिंग्स आदि को बदलने वाले टेस्ट, स्टेजिंग, लाइव कॉन्फ़िगरेशन हैं

हालाँकि मैं निम्नलिखित कार्य करूंगा:

  • वांछित ट्रांसफ़ॉर्म कॉन्फ़िगरेशन (जैसे Web.Live.config) पर राइट क्लिक करें )
  • "पूर्वावलोकन ट्रांसफ़ॉर्म" पर क्लिक करें
  • सब कुछ सही से कॉपी करें (यह वेब.कॉन्फिग रूपांतर के साथ कैसा दिखता है)
    • CTRL + A + CTRL + C
  • Web.config फ़ाइल खोलें (डिफ़ॉल्ट एक)
  • सब कुछ चुनें (CTRL + A) और इसे (CTRL + V) पेस्ट करें
  • Daud

यह नहीं है कि जब आप इसे लटकाते हैं तो कई कदम और बहुत जल्दी किया जाता है। उम्मीद है की यह मदद करेगा। :)


अगर मैं सही तरीके से समझ गया हूं तो यह मूल web.config फ़ाइल में एक विनाशकारी परिवर्तन है। प्रश्न के संदर्भ में इन चरणों को हर बार डिबग सत्र शुरू करने के लिए निष्पादित करने की आवश्यकता होगी।
लाल ताज़

-1

@ होलसेसा: आपके समाधान को मूल Web.config तक पहुंच की आवश्यकता है (आपको TFS में चेक-आउट करना होगा)। बेहतर उपाय यह है कि बिन फ़ोल्डर में सीधे Web.config उत्पन्न किया जाए जैसे कि कीटन ऐसा करता है। जब हम कीटन और आपके समाधान को मिलाते हैं तो हमें यह मिलता है:

<Target Name="BeforeBuild">
    <Message Text="Transforming Web.config from Web.$(Configuration).config" Importance="high" />
    <MakeDir Directories="bin" Condition="!Exists('bin')" />
    <TransformXml Source="Web.Config" Transform="Web.$(Configuration).config" Destination="bin\$(TargetFileName).config" StackTrace="true" />
</Target>

3
अच्छा होगा लेकिन जैसा कि मिक ने टिप्पणी की है; इस फ़ाइल का उपयोग नहीं किया गया है। मैं इस कॉन्फिगरेशन फ़ाइल का उपयोग कैसे करूँ?
एचएमआर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.