2014-04-19 8 views
5

मैं एक वेब अनुप्रयोग परियोजना है। 3 प्रकाशित प्रोफाइल भी हैं।वेब परिनियोजन के लिए नाम बदलने का तरीका कैसे? - प्रत्येक परिवेश के लिए एक</p> <p><img src="https://i.stack.imgur.com/FjM47.png" alt="enter image description here"></p> <p>जैसा कि आप देख सकते हैं, वहाँ 3 रोबोट पाठ फाइलों हैं:

अब, प्रत्येक pubxml के लिए मैं सही "robots.xxx.txt" फ़ाइल चुनना चाहता हूं और इसे "robots.txt" में बदलना चाहता हूं। आदर्श रूप में मैं एमएसबिल्ड का लाभ उठाना चाहता हूं और कॉन्फ़िगरेशन को प्रत्येक पब्क्सएमएल फ़ाइल में रखना चाहता हूं।

प्रत्येक 3 प्रकाशित प्रोफाइल <WebPublishMethod>MSDeploy</WebPublishMethod> का उपयोग कर रहा है।


संपादित करें:

बस Richard Szalay answer की कोशिश की, लेकिन कोई लाभ नहीं हुआ। सभी 3 फाइलें अभी भी आउटपुट निर्देशिका में कॉपी की गई हैं। यही मेरी प्रकाशित प्रोफ़ाइल अब

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
     <WebPublishMethod>FileSystem</WebPublishMethod> 
     <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration> 
     <LastUsedPlatform>Any CPU</LastUsedPlatform> 
     <SiteUrlToLaunchAfterPublish /> 
     <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish> 
     <PrecompileBeforePublish>True</PrecompileBeforePublish> 
     <EnableUpdateable>True</EnableUpdateable> 
     <DebugSymbols>False</DebugSymbols> 
     <WDPMergeOption>DonotMerge</WDPMergeOption> 
     <ExcludeApp_Data>True</ExcludeApp_Data> 
     <publishUrl>C:\Temp\myproject</publishUrl> 
     <DeleteExistingFiles>False</DeleteExistingFiles> 
    </PropertyGroup> 

    <ItemGroup> 
     <MsDeployReplaceRules Include="robots"> 
      <ObjectName>filePath</ObjectName> 
      <Match>robots\.debug\.txt</Match> 
      <Replace>robots.txt</Replace> 
     </MsDeployReplaceRules> 
    </ItemGroup> 
</Project> 

उत्तर

3

आपको एक प्रतिस्थापन नियम की आवश्यकता है। आप वैकल्पिक रूप से अपने वेब अनुप्रयोग की जड़ में एक भी Robots.wpp.targets फ़ाइल बना सकते हैं फ़ाइल नामकरण कन्वेंशन अपने प्रकाशित प्रोफाइल से मेल खाता है

<ItemGroup> 
    <MsDeployReplaceRules Include="robots"> 
    <ObjectName>filePath</ObjectName> 
    <Match>robots\.debug\.txt</Match> 
    <Replace>robots.txt</Replace> 
    </MsDeployReplaceRules> 
</ItemGroup> 

, और निम्न का उपयोग करें:: बस अपने प्रकाशित प्रोफ़ाइल की निम्नलिखित जोड़ने

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <ItemGroup> 
    <MsDeployReplaceRules Include="robots"> 
     <ObjectName>filePath</ObjectName> 
     <Match>robots\.$(PublishProfileName)\.txt</Match> 
     <Replace>robots.txt</Replace> 
    </MsDeployReplaceRules> 
    </ItemGroup> 
</Project> 
+0

उत्तर देने के लिए धन्यवाद। मैंने कोड की कोशिश की है, लेकिन मुझे लगता है कि मैं कुछ गलत कर रहा हूं। क्या आप कृपया अद्यतन प्रश्न पर एक नज़र डालें। – niaher

2

मुझे नहीं पता कि यह तकनीकी रूप से सही तरीका है, लेकिन यह मेरे लिए काम करता है।

अपने pubxml फ़ाइल में PropertyGroup नोड के अंतर्गत इस नोड जोड़ें:

<Target Name="MoveRobotsTxt" AfterTargets="GatherAllFilesToPublish"> 
    <Move Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " SourceFiles="obj\$(ConfigurationName)\Package\PackageTmp\robots.release.txt" DestinationFiles="obj\$(ConfigurationName)\Package\PackageTmp\robots.txt" /> 
    <Delete Files="obj\$(ConfigurationName)\Package\PackageTmp\robots.release.txt" /> 
</Target> 

तुम सिर्फ Release की तुलना में अधिक उपयोग करते हैं, आप Move आदेश की प्रतिलिपि बनाएँ और अपने निर्माण के नाम या करने के लिए Release|AnyCPU को बदलना होगा विशेष चर $ (ConfigurationName) का उपयोग करें।

यदि आप किसी मौजूदा robots.txt आप केवल बदलने के लिए अगर यह रिलीज़ संस्करण है चाहता हूँ की जरूरत नहीं है के रूप में, आप शायद चाहता हूँ:

<Target Name="MoveRobotsTxt" AfterTargets="GatherAllFilesToPublish"> 
    <Move SourceFiles="obj\$(ConfigurationName)\Package\PackageTmp\robots.$(ConfigurationName).txt" DestinationFiles="obj\$(ConfigurationName)\Package\PackageTmp\robots.txt" /> 
</Target> 

के लिए मुझे pubxml को साकार किया गया था बड़ा आह-हा एक प्रोजेक्ट फ़ाइल की तरह है और आप उन सभी आदेशों का उपयोग कर सकते हैं जिनका उपयोग आप msbuild के लिए करते हैं।

इसे हल करने का प्रयास करते समय मैंने देखा कि 2010 और 2012 के बीच कुछ बदलाव हुए हैं जो बता सकते हैं कि रिचर्ड का जवाब क्यों काम नहीं कर रहा है।

संपादित करें:

मेरे मूल जवाब किसी कारण से MSBuild के साथ काम नहीं किया, पाइप लाइन MSBuild और विजुअल स्टूडियो के बीच अलग अलग लगता है।

प्रकाशित प्रोफ़ाइल में भी लक्ष्य नहीं चला।

<Target Name="move_robots_in_msbuild" AfterTargets="PipelinePreDeployCopyAllFilesToOneFolder"> 
    <Move Condition=" '$(Configuration)' == 'Live' " SourceFiles="obj\$(ConfigurationName)\Package\PackageTmp\robots.live.txt" DestinationFiles="obj\$(ConfigurationName)\Package\PackageTmp\robots.txt" /> 
    <Delete Files="obj\$(ConfigurationName)\Package\PackageTmp\robots.live.txt" /> 
</Target> 
<Target Name="move_robots_in_visual_studio" AfterTargets="GatherAllFilesToPublish"> 
    <Move Condition=" '$(Configuration)' == 'Live' " SourceFiles="obj\$(ConfigurationName)\Package\PackageTmp\robots.live.txt" DestinationFiles="obj\$(ConfigurationName)\Package\PackageTmp\robots.txt" /> 
    <Delete Files="obj\$(ConfigurationName)\Package\PackageTmp\robots.live.txt" /> 
</Target> 
0

मैं आज सुबह एक ही समस्या थी, लेकिन इसके बाद के संस्करण की आपूर्ति दो जवाब या तो मेरे लिए काम नहीं किया: तो मैं बाद बाहर टिप्पणी की BeforeBuild/AfterBuild अंत में मेरी प्रोजेक्ट फाइल इस जोड़ने का संपादन किया।

आखिरकार मैं इस लेख का पालन - http://www.asp.net/mvc/overview/deployment/visual-studio-web-deployment/deploying-extra-files

तो बस मेरे डिबग, रिलीज में टैग से पहले और फ़ाइलों .pubxml मंचन इस मार्कअप जोड़ा, उचित robots.release.txt का नाम बदलने:

<Target Name="CustomCollectFiles"> 
    <ItemGroup> 
     <_CustomFiles Include="robots.release.txt" /> 
     <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)"> 
     <DestinationRelativePath>%(RecursiveDir)robots.txt</DestinationRelativePath> 
     </FilesForPackagingFromProject> 
    </ItemGroup> 
    </Target> 
    <PropertyGroup> 
    <CopyAllFilesToSingleFolderForPackageDependsOn> 
     CustomCollectFiles; 
     $(CopyAllFilesToSingleFolderForPackageDependsOn); 
    </CopyAllFilesToSingleFolderForPackageDependsOn> 

    <CopyAllFilesToSingleFolderForMsdeployDependsOn> 
     CustomCollectFiles; 
     $(CopyAllFilesToSingleFolderForPackageDependsOn); 
    </CopyAllFilesToSingleFolderForMsdeployDependsOn> 
    </PropertyGroup> 

मैं उम्मीद है कि यह किसी भी मुद्दे पर आने वाले किसी भी व्यक्ति की सहायता करेगा।

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

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