2010-07-22 12 views

उत्तर

88

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

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

कृपया इसे वोट दें, यदि आप यह भी सामना करते हैं, तो यह जल्द से जल्द तय की जाएगी।

+16

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

+0

@ सैयद मैं आपसे सहमत हूं :) – stacker

+20

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

34

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

वेब.कॉन्फिग युक्त प्रोजेक्ट की .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

का उपयोग करना बेहतर है, जैसा कि http://stackoverflow.com/a/10506476/52277 –

+0

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

0

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

हालांकि मैं निम्नलिखित करना होगा:

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

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

+0

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

2

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

(सिर्फ अंतिम समापन परियोजना टैग से पहले)

<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 

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

+2

यह बिन निर्देशिका में कॉन्फ़िगरेशन को बदलता है, दुर्भाग्यवश यह कॉन्फ़िगर कभी भी उपयोग नहीं किया जाता है। लोड की गई कॉन्फ़िगरेशन वास्तव में वेब है। प्रोजेक्ट फ़ोल्डर में कॉन्फिग, बिन निर्देशिका में से एक नहीं। – Mick

10

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

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

पुष्टि की, यह काम करता है। लेकिन सावधान रहें, यह Web.config की स्थानीय प्रति को संशोधित करता है। तो यदि आप XSLT का उपयोग कर रहे हैं जैसे RemoveAttributes, यह निश्चित रूप से हटा दिया गया है! SetAttributes –

+0

धन्यवाद के साथ अच्छी तरह से काम करता है! यह मेरे लिए काम है! – panicoper

+0

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

-1

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

<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> 
+2

अच्छा होगा लेकिन मिक ने टिप्पणी की थी; इस फ़ाइल का उपयोग नहीं किया जाता है। मैं एप्लिकेशन या आईआईएस इस कॉन्फ़िगरेशन फ़ाइल का उपयोग कैसे करूं? – HMR

1

इसी तरह के कई पदों फ़ाइलें नहीं या web.config सुलभ नहीं किया जा रहा ओवरराइट किया जा करने में सक्षम होने के साथ समस्याओं पढ़ रहे हैं और होने की वजह से इसे पढ़ने के बाद ही यह क्या है मैं मेरे लिए काम कर गया:

<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> 

नोट्स:

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

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

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

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

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

संबंधित मुद्दे

 संबंधित मुद्दे