2011-04-16 11 views
6

विजुअल स्टूडियो 2010 में, आप जानते हैं कि आप अपनी कॉन्फ़िगरेशन (डीबग, रिलीज इत्यादि) कैसे बदल सकते हैं, समाधान एक्सप्लोरर में एक प्रोजेक्ट पर राइट-क्लिक करें, प्रकाशित करें पर क्लिक करें, और चयनित कॉन्फ़िगरेशन के लिए सभी महत्वपूर्ण वेब ऐप प्रोजेक्ट फाइलें कॉपी करें एक एक्सडीटी-रूपांतरित web.config के साथ एक लक्ष्य फ़ोल्डर के लिए? खैर, मैं ठीक उसी तरह के एमएसबीयूआईएलडी के लिए देख रहा हूं।विजुअल स्टूडियो 2010: एमएसबीयूआईएलडी के साथ एक लक्षित फ़ोल्डर में एएसपी.NET वेब ऐप कैसे प्रकाशित करें?

आपको मेरी चुनौती: एक लाइन प्रदान करें जिसे मुझे पूरा करने के लिए मुझे अपने कमांड प्रॉम्प्ट पर निष्पादित करने की आवश्यकता है। कोई तीसरा पार्टी कार्यक्रम नहीं। कोई ट्यूटोरियल वीडियो नहीं। बस एक सिंगल, सीधा-अप कमांड जिसे मैं सचमुच आपकी प्रतिक्रिया से कॉपी कर सकता हूं, कमांड विंडो में पेस्ट कर सकता हूं, मेरी निर्देशिका संरचना का समर्थन करने के लिए आवश्यक के रूप में संशोधित कर सकता हूं, और फिर एंटर दबाएं।

यदि नहीं, तो शायद कोई भी एक पूर्ण MSBUILD संदर्भ के लिए एक लिंक प्रदान कर सकता है जिसमें प्रत्येक कमांड, स्विच और वैल्यू को कमांड लाइन पर उपयोग किया जा सकता है।

उत्तर

6

ProjectPublish.MSBuild.xml फ़ाइल (परिवर्तन PropertyGroup रूप में की जरूरत) करने के लिए नीचे रखो:

<?xml version="1.0" encoding="utf-8" ?> 
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Publish"> 
    <PropertyGroup> 
     <ProjectFile>Path\To\Web.csproj</ProjectFile> 
     <PublishDir>Path\For\Publish\Output</PublishDir> 
     <TempDir>Path\To\Temp\Folder</TempDir> 
     <BuildConfig>Release|Debug</BuildConfig> 
    </PropertyGroup> 

    <Target Name="Publish"> 
     <MSBuild Projects="$(ProjectFile)" 
       Properties="Configuration=$(BuildConfig);WebProjectOutputDir=$(PublishDir);OutDir=$(TempDir)\;BuildingProject=true" 
       Targets="ResolveReferences;_CopyWebApplication" /> 
    </Target> 
</Project>

कमांड लाइन (या .bat फ़ाइल) से इस कॉलिंग चाल करना चाहिए:

%windir%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe ProjectPublish.MSBuild.xml 
+0

इस तरह की चीज़ पहले कभी नहीं देखी। क्या मैं सिर्फ उस XML फ़ाइल को प्रोजेक्ट में जोड़ता हूं? मेरे पास वर्तमान में ऐसी एक्सएमएल फ़ाइल नहीं है। – oscilatingcretin

+0

यह एक एक्सएमएल फ़ाइल है जो एमएसबिल्ड समझता है और संसाधित कर सकता है। आपकी परियोजना और समाधान फाइलें एक ही नस्ल के हैं।आपके समाधान के पास/आपके पास ऐसी फाइलें होने से जीवन आसान हो जाता है – Ramunas

+0

इसलिए मैंने अभी कोशिश की और प्रकाशन काम करता प्रतीत होता है। हालांकि, यह परिवर्तन लागू करने के लिए प्रतीत नहीं होता है। जब मैं मैन्युअल रूप से प्रकाशित करता हूं, तो मेरा web.config ठीक से बदल जाता है। कोई विचार क्या मैं कर सकता हूँ? – oscilatingcretin

0

मैं समाधान नहीं मिला मैं इन सभी महीनों के बाद देख रहा था here

यदि उपर्युक्त लिंक खराब हो जाता है, तो यहां मैं क्या पतला हूं टी कहते हैं:

अनलोड करें फिर अपनी प्रोजेक्ट फ़ाइल संपादित करें। उस लाइन की तलाश करें जहां यह माइक्रोसॉफ्ट.WebApplication.targets आयात कर रहा है।

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

कि लाइन के नीचे, पेस्ट इस एक्सएमएल में:

:

<Target Name="PublishToFileSystem" DependsOnTargets="PipelinePreDeployCopyAllFilesToOneFolder"> 
    <Error Condition="'$(PublishDestination)'==''" Text="The PublishDestination property must be set to the intended publishing destination." /> 
    <MakeDir Condition="!Exists($(PublishDestination))" Directories="$(PublishDestination)" /> 

    <ItemGroup> 
     <PublishFiles Include="$(_PackageTempDir)\**\*.*" /> 
    </ItemGroup> 

    <Copy SourceFiles="@(PublishFiles)" DestinationFiles="@(PublishFiles->'$(PublishDestination)\%(RecursiveDir)%(Filename)%(Extension)')" SkipUnchangedFiles="True" /> 
</Target> 

अब, अपने प्रोजेक्ट फाइल के रूप में ही फ़ोल्डर के भीतर एक कमांड प्रॉम्प्ट में इस चलाने की तरह दिखाई देगा msbuild TestWebApp.csproj "/p:Platform=AnyCPU;Configuration=Debug;PublishDestination=C:\pub" /t:PublishToFileSystem

आदेश में MSBUILD के पथ को निर्दिष्ट करना याद रखें या अपने वैश्विक पथ पर्यावरण चर के पथ को जोड़ना याद रखें ले (जो मैंने किया)। मेरी मशीन पर, यह यहाँ था:

C:\Windows\Microsoft.NET\Framework\v4.0.30319

इस परीक्षण के लिए, मैं एक config एक AppSetting कुंजी जोड़ने के लिए (यदि आप ऐसा करते हैं, यकीन है कि AppSettings नोड है मेरी Web.Release.config में परिणत कर दिया अपनी बेस कॉन्फ़िगरेशन फ़ाइल में मौजूद है या आपको एक त्रुटि मिलेगी)। जब मैंने उपरोक्त आदेश का उपयोग डीबग कॉन्फ़िगरेशन बनाने के लिए किया था, तो कुंजी प्रकाशित कॉन्फ़िगरेशन फ़ाइल में अपेक्षित के रूप में मौजूद नहीं थी। हालांकि, जब मैंने रिलीज कॉन्फ़िगरेशन का उपयोग किया था, तो कुंजी को फ़ाइल में सफलतापूर्वक जोड़ा गया था।

मैं वास्तव में चाहता हूं कि माइक्रोसॉफ्ट ने इस से बाहर बिल्ली को खराब नहीं किया है। किसी भी दर पर, यह इंटरनेट पर कहीं भी पाया गया सबसे आसान समाधान है। मुझे उम्मीद है कि यह आपके बाकी हिस्सों में मदद करेगा।

+1

उत्तर के रूप में चिह्नित किया गया। जाहिर है, जब आप अपने वेब ऐप में किसी अन्य प्रोजेक्ट का संदर्भ दे रहे हैं तो यह सही काम नहीं करता है। इसे खोजना और जब मुझे कोई जवाब मिल जाए तो अपडेट पोस्ट करेगा। – oscilatingcretin