मैं Web.debug.config
दृश्य स्टूडियो 2010 में निर्मित डिबगर में विलय और उपयोग कैसे कर सकता हूं ?
जवाबों:
यह एक ज्ञात बग है। उस सुविधा का उपयोग अभी केवल परिनियोजन प्रक्रिया के भाग के रूप में किया जा सकता है।
कृपया इसे बढ़ाएं, यदि आप भी इसका सामना करते हैं, तो यह एएसएपी तय किया जाएगा।
यह वास्तव में करने के लिए काफी सरल है और, इस पर विश्वास करें या न करें, ऐसा लगता है कि यह वीएस के काम करने के लिए डिज़ाइन किया गया है।
वेब की .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
Web.config
, इसलिए आपके सभी परिवर्तनों को "निष्पादनीय" होना चाहिए ( किसी भी अन्य परिवर्तनों के परिणामों पर फिर से लागू किया जा सकता है )। यह आपको अपनी पवित्रता को बनाए रखने से भी रोकेगा, आपको फ़ाइल को स्रोत नियंत्रण में रखना चाहिए (जैसा कि आपको शायद करना चाहिए)। कुल मिलाकर एक "सरल" हैक जो समस्याओं के अगले सेट में जटिलता / दर्द को स्थानांतरित करता है। अच्छा है अगर आप इसे "बेहतर" कर सकते हैं, तो बुरा अगर आप नहीं करते हैं। वीएस संस्करण को हार्ड-कोडिंग के बजाय $ (विजुअलस्टडियोवर्जन) का उपयोग करने पर विचार करें (आप इसे बदलना भूल जाएंगे )।
मैंने इसे सरल तरीके से, .csproj फ़ाइल के अंत में जोड़कर, टैग से ठीक पहले हल किया था। यह keitn के उत्तर के समान है, इस अंतर के साथ कि यह पोस्ट बिल्ड ईवेंट का उपयोग नहीं करता है।
<Target Name="BeforeBuild">
<TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="Web.config" />
</Target>
मैं अपने प्रोजेक्ट में 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 के साथ हस्तक्षेप नहीं होता है।
कई समान पोस्ट पढ़ने के बाद और फ़ाइलों को ओवरराइट या वेब नहीं होने के कारण समस्याएँ होने लगीं। वेबफिग सुलभ नहीं होने के कारण यह केवल इसलिए पढ़ा जाता है कि मुझे मेरे लिए काम करना चाहिए:
<Target Name="BeforeBuild" Condition="$(Configuration) == 'MyAltDebugConfiguration'">
<ItemGroup>
<OriginalWebConfig Include="$(ProjectDir)Web.config"/>
<TempWebConfig Include="$(ProjectDir)TempWeb.config"/>
</ItemGroup>
<Exec Command=""$(DevEnvDir)tf.exe" checkout "$(ProjectDir)Web.config"" />
<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
। कोई विचार?
मुझे पता है कि यह पुराना है, लेकिन मैं उसी समस्या का सामना कर रहा हूं। हमारे पास डिफ़ॉल्ट Web.config से एंडपॉइंट, कनेक्शन स्ट्रिंग्स आदि को बदलने वाले टेस्ट, स्टेजिंग, लाइव कॉन्फ़िगरेशन हैं
हालाँकि मैं निम्नलिखित कार्य करूंगा:
यह नहीं है कि जब आप इसे लटकाते हैं तो कई कदम और बहुत जल्दी किया जाता है। उम्मीद है की यह मदद करेगा। :)
@ होलसेसा: आपके समाधान को मूल 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>