2012-05-08 6 views
32

से बदलती है मेरे पास लक्षित करने के लिए दो निर्माण वातावरण हैं; रिलीज और स्टेजिंग।web.config फ़ाइल कमांड लाइन

<system.web>  
    <authentication mode="Windows"> 
    </authentication> 

    <authorization> 
     <deny users="?" /> 
    </authorization> 
</system.web> 

मैं मंचन config करने के लिए का निर्माण करके यह बदलना चाहते हैं: Web.config इस तरह दिखता है Web.Staging.config

<system.web>  
    <authentication mode="Windows"> 
    </authentication> 

    <authorization xdt:Transform="Replace"> 
     <deny users="?" /> 
     <allow roles="StagingRoles" /> 
     <deny users="*" /> 
    </authorization> 
</system.web> 

मैं इस तरह कमांड लाइन से निर्माण:

msbuild buildscript.build /p:Configuration=Staging 

निर्माण के बाद, मुझे web.config फ़ाइल को निर्माण कलाकृतियों फ़ोल्डर में परिवर्तित नहीं किया गया है। क्या यहां कुछ गड़बड़ है?

धन्यवाद

उत्तर

31

आप अपने वेब अनुप्रयोग के लिए .csproj फ़ाइल के नीचे करने के लिए निम्न एक्सएमएल जोड़ते हैं, तो आप सुनिश्चित करेंगे कि config परिवर्तन होता है हर निर्माण से पहले:

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" /> 
<Target Name="BeforeBuild"> 
    <TransformXml Source="Web.Base.config" Transform="Web.$(Configuration).config" Destination="Web.config" /> 
</Target> 

संपादित करें : आपकी टिप्पणी के जवाब में, आप TransformXml कार्य में स्रोत पैरामीटर के रूप में Web.config का उपयोग करने में सक्षम होना चाहिए (चरण # 2 देखें)। आप केवल config निर्माण लिपि में परिणत प्रदर्शन करने के लिए चाहते हैं, तो इन निर्देशों का पालन:

1) अपने निर्माण लिपि में आयात WebApplication.targets तो जैसे:

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" /> 

2) में निष्पादित TransformXml निर्माण कार्य आपकी बिल्ड स्क्रिप्ट लक्ष्य:

<Target Name="MyBuildScriptTarget"> 
    <TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="Web.config" /> 
    ...other build tasks... 
</Target> 
+0

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

+0

@sheldon_cooper मैंने अपना जवाब अपडेट किया। –

+0

यह काम करता है लेकिन एक समस्या है। जब रूपांतरण होता है, तो मुझे कुछ हद तक एक त्रुटि मिलती है: Web.config फ़ाइल किसी अन्य प्रक्रिया द्वारा उपयोग की जा रही है।मैंने इसे संकलन लक्ष्य के बाद बुलाया। –

17

जोनाथन का जवाब अच्छा है। मैंने मूल Web.config फ़ाइल को बनाए रखने की अनुमति देने के लिए थोड़ा सा tweaked। ये लाइनें मैं अपने .csproj फ़ाइल के नीचे जोड़ी हैं:

<!-- the step to copy the config file first avoids a 'File is being used by another process' error --> 
    <Target Name="BeforeBuild"> 
    <Copy SourceFiles="Web.config" DestinationFiles="Web.temp.config" OverwriteReadOnlyFiles="True" /> 
    <TransformXml Source="Web.temp.config" Transform="Web.$(Configuration).config" Destination="Web.config" /> 
    </Target> 
    <Target Name="AfterBuild"> 
    <Copy SourceFiles="Web.temp.config" DestinationFiles="Web.config" OverwriteReadOnlyFiles="True" /> 
    <Delete Files="Web.temp.config" /> 
    </Target> 

मैं देख सकता हूँ कि web.config फ़ाइल निर्माण दृश्य स्टूडियो के भीतर (या कमांड लाइन से) चलाकर तब्दील हो जाता है। जोनाथन के जवाब से अधिक

+0

यह जवाब बहुत बेहतर बी/सी है जब मैं परीक्षण कर रहा था, यह मेरी मूल वेब.कॉन्फिग फ़ाइल को मेरे वीएस प्रोजेक्ट –

+1

में बदल दिया गया है एक्सएमएल में एक गलती है। ट्रांसफॉर्मएक्सएल में आपको स्रोत और गंतव्य स्वैप करना चाहिए। अन्यथा परिवर्तन लागू नहीं है। वैसे भी आपके जवाब के लिए बहुत कुछ! खोज के दिनों के बाद यह वेब – AlexProutorov

+0

उत्कृष्ट में एकमात्र सही जवाब प्रतीत होता है। धन्यवाद। वास्तव में ऐसा लगता है कि हमें ऐसा करने की आवश्यकता नहीं है (और पहले इसकी आवश्यकता नहीं है) लेकिन हे, यह काम करता है ... –

5

टिनी सुधार:

वेब लक्ष्य आयात करने के लिए किसी भी दृश्य स्टूडियो संस्करण के साथ संगत होना करने की अनुमति देगा के लिए नीचे दिए गए इस लाइन का उपयोग करना। नोट इस संस्करण v10.0

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\WebApplications\Microsoft.WebApplication.targets" /> 
0

से बंधी नहीं है बिल्ड जेनकींस के साथ बदलने का प्रयोग, मैं भी देख सकते हैं कि web.config को बदलने नहीं है तथापि, वास्तविक परिवर्तन तब होता है जब आप तैनाती है। मैं एक साथ निर्माण और तैनाती करने के लिए एक msbuild कमांड में सभी का उपयोग करता हूं।

MSBuild MyProj.csproj /P:Configuration=Release /P:DeployOnBuild=True /P:DeployTarget=MsDeployPublish /P:MsDeployServiceUrl=https://your server/msdeploy.axd /P:AllowUntrustedCertificate=True /P:MSDeployPublishMethod=WMSvc /P:CreatePackageOnPublish=True /P:UserName=username /P:Password=password1 /P:DeployIISAppPath="Default Web Site or name of your website"

और एक बार भाग गया, आप सर्वर है कि परिवर्तन होता है पर सत्यापित कर सकते हैं।