विज़ुअल स्टूडियो में वेब साइट से प्रकाशित फ़ाइलों को छोड़ दें


79

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

अगर आईडीई इस सुविधा की पेशकश नहीं करता है, तो क्या किसी के पास ऐसी फाइलों को संभालने की अच्छी तकनीक है?


3
यहाँ आप एक बहुत ही सरल समाधान पा सकते हैं: stackoverflow.com/questions/1288858/…
दिमित्री मेलनिक

जवाबों:


32

यदि आप एक्सटेंशन के आधार पर फ़ाइलों की पहचान कर सकते हैं, तो आप web.config में buildproviders टैग का उपयोग करके इसे कॉन्फ़िगर कर सकते हैं । एक्सटेंशन जोड़ें और इसे ForceCopyBuildProvider पर मैप करें। उदाहरण के लिए, .xml फ़ाइलों को एक प्रकाशित कार्रवाई के साथ कॉपी करने के लिए कॉन्फ़िगर करने के लिए, आप निम्न कार्य करेंगे:

<configuration>...
    <system.web>...
        <compilation>...
            <buildProviders>
                <remove extension=".xml" />
                <add extension=".xml" type="System.Web.Compilation.ForceCopyBuildProvider" />
            </buildProviders>

किसी दिए गए फ़ाइल को कॉपी होने से बचाने के लिए, आप वही काम करेंगे लेकिन System.Web.Compilation.IgnoreFileBuildProvider का उपयोग करें।


बेहद कूल। Wpp.targets फ़ाइल में अनुशंसित ExcludeFromPackageFiles के साथ कोई भाग्य नहीं था। उत्तरार्द्ध काफी बेकार है क्योंकि यह वाइल्डकार्ड को एक स्तर से अधिक के फ़ोल्डरों के साथ समर्थन नहीं करता है। धन्यवाद
DvS

128

अपनी परियोजना फ़ाइल (.csproj, .vbproj, आदि) में तत्वों ExcludeFilesFromDeploymentऔर जोड़कर फ़ाइलों और फ़ोल्डरों को बाहर निकालें ExcludeFoldersFromDeployment। आपको फ़ाइल को टेक्स्ट एडिटर में या विजुअल स्टूडियो में प्रोजेक्ट को अनलोड करके और फिर उसे एडिट करना होगा।

PropertyGroupनीचे दिखाए अनुसार उपयुक्त (डीबग, रिलीज़, आदि) के भीतर कहीं भी टैग जोड़ें :

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 
  ... 
  <ExcludeFilesFromDeployment>File1.aspx;Folder2\File2.aspx</ExcludeFilesFromDeployment> 
  <ExcludeFilesFromDeployment>**\.svn\**\*.*</ExcludeFilesFromDeployment>
  <ExcludeFoldersFromDeployment>Folder1;Folder2\Folder2a</ExcludeFoldersFromDeployment> 
</PropertyGroup>

वाइल्डकार्ड समर्थित हैं।

ऊपर दिए गए उदाहरण को समझाने के लिए:

  • 1 ExcludeFilesFromDeploymentशामिल नहीं है File1.aspx(परियोजना की जड़ में) और Folder2\File2.aspx( परियोजना Folder2की जड़ में है)
  • 2 ExcludeFilesFromDeploymentकिसी भी फ़ोल्डर में .svnऔर उसके सबफ़ोल्डर्स के भीतर सभी फ़ाइलों को शामिल नहीं करता है
  • ExcludeFoldersFromDeploymentशामिल नहीं फ़ोल्डरों नामित Folder1(परियोजना के रूट में) और Folder2\Folder2a( Folder2परियोजना की जड़ में है)

अधिक जानकारी के लिए देखें MSDN ब्लॉग पोस्ट वेब परिनियोजन: वेब अनुप्रयोग प्रोजेक्ट फ़ाइल के माध्यम से फ़ाइलें और फ़ोल्डर को छोड़कर


1
क्या इसके साथ उपयोगकर्ता वाइल्डकार्ड का कोई तरीका है?
रॉयडुकरी

4
यह मेरे लिए स्वीकृत उत्तर की तुलना में बहुत बेहतर है क्योंकि मैं प्रकाशित के दौरान Web.config फ़ाइल को बाहर करना चाहता हूं!
माइकल एकिंस

6
"वेब साइट" प्रकार की परियोजनाओं पर, यह कोड स्निपेट ~ .pubxml फ़ाइलों को ~ / App_Data / PublishProfiles / में स्थित हो जाता है।
16

4
एक वेब एप्लिकेशन में आप इन तत्वों को जोड़ सकते हैं आप के प्रॉपर्टी ग्रुप में प्रोफाइल प्रकाशित करें @ ~ \ Properties \ PublishProfiles
ExecutionOrder

6
क्या परियोजना फ़ाइल को सीधे संपादित करने के बजाय UI के माध्यम से ऐसा करने का कोई तरीका है?
कुर्रें

35

आश्चर्यजनक रूप से विजुअल स्टूडियो 2012 का उत्तर यहां नहीं है:

  • ग्रीन चेकमार्क वाला उत्तर इसका उत्तर नहीं है।

  • उच्चतम "यूप्ड" उत्तर 2010 के एक लेख का संदर्भ देता है और कहता है कि आपको अपनी csproj परियोजना फ़ाइल को संपादित करना होगा जो अब गलत है। मैंने अपने Visual Studio 2012 csproj फ़ाइल में ExcludeFoldersFromDeployment XML तत्व को जोड़ा और उसने कुछ भी नहीं किया, तत्व को अमान्य माना गया, ऐसा इसलिए है क्योंकि ExcludeFoldersFromDeployment को .pubxml फ़ाइल में ले जाया गया है, जैसा दिखता है।

वेब एप्लिकेशन और वेबसाइट के लिए आप .pubxml फ़ाइल को संपादित करते हैं!

आप मेरे उत्तर का अनुसरण कर सकते हैं या इस गाइड को आज़मा सकते हैं, जो मुझे बाद में मिला: http://www.leniel.net/2014/05/using-msdeploy-publish-profile-pubxml-to-create-an-empty-folder-structure- पर iis-

जी हाँ, आप ऐसा सिर्फ Website Projects के लिए ही नहीं बल्कि Websites के लिए भी कर सकते हैं। मैं एक दृश्य स्टूडियो वेबसाइट (नहीं वेबसाइट परियोजना) के साथ इस मायावी अपवर्जित क्षमता की तलाश में इंटरनेट पर एक लंबा समय बिताया था और पहले निष्कर्ष निकाला था कि यह संभव नहीं था, लेकिन ऐसा लगता है:

अपने [mypublishwebsitename] .pubxml फ़ाइल में, वेब एप्लिकेशन प्रोजेक्ट्स के लिए ~ / Properties / PublishProfiles और वेबसाइटों के लिए ~ / App_Data / PublishProfiles में, बस जोड़ें:

  <ExcludeFilesFromDeployment>File1.aspx;Folder2\File2.aspx</ExcludeFilesFromDeployment> 
 <ExcludeFoldersFromDeployment>Folder1;Folder2\Folder2a</ExcludeFoldersFromDeployment>

<PropertyGroup>आपके .pubxml फ़ाइल में मुख्य तत्व के रूप में बच्चे । जब तक आप एक विशिष्ट बिल्ड प्रकार की कुंजी नहीं लगाते हैं, तब तक एक नया तत्व जोड़ने की आवश्यकता नहीं है, जैसे रिलीज़ या डिबग।

लेकिन रुकें!!!

यदि आप अपने प्रकाशन में निम्न सेटिंग के साथ अपने गंतव्य / लक्ष्य सर्वर से फ़ाइलें निकाल रहे हैं:

यहाँ छवि विवरण दर्ज करें

फिर वेब पब्लिश प्रक्रिया आपके स्रोत / लक्ष्य सर्वर पर किसी भी चीज को हटा देगी, जैसे आपके <ExcludeFoldersFromDeployment>और आपके द्वारा डिलीट की गई वस्तु <ExcludeFilesFromDeployment>!

MsDeploy बचाव के लिए नियम छोड़ें:

सबसे पहले, वेब पब्लिश करने के लिए MSBuild (टास्क IO या ऐसा कुछ कहा जाता है) के अलावा कुछ और का उपयोग करता है, लेकिन इसमें बग है और स्किप नियमों को मान्यता नहीं देगा, इसलिए आपको अपने .pubxml में जोड़ना होगा:

<PropertyGroup>
    <WebPublishMethod>MSDeploy</WebPublishMethod>
</PropertyGroup>

मैं <WebPublishMethod>अपने <PropertyGroup>आप <PropertyGroup>में रखूंगा , आपको लगता है कि आप अपने .pubxml में सिर्फ एक तत्व रख सकते हैं लेकिन जब तक मैं <WebPublishMethod>अपने <PropertyGroup>तत्व में नहीं जाता तब तक मेरे स्किप नियम नहीं कहे जा रहे थे । हां, पागल, लेकिन इस तथ्य को वेब पब्लिश करने के लिए आपको यह सब करने की जरूरत है और अपने सर्वर पर एक फ़ोल्डर / फ़ाइल को भी नहीं हटाना है।

अब मेरे वास्तविक स्किपरुल्स, एक्सक्लूडफोल्डर्स और एक्सक्लूजफाइल घोषणाएं मेरे .pubxml में:

<ExcludeFoldersFromDeployment>Config</ExcludeFoldersFromDeployment>
<ExcludeFoldersFromDeployment>Photos</ExcludeFoldersFromDeployment>
<ExcludeFoldersFromDeployment>Temp</ExcludeFoldersFromDeployment>
<ExcludeFilesFromDeployment>Web.config</ExcludeFilesFromDeployment>
 <AfterAddIisSettingAndFileContentsToSourceManifest>AddCustomSkipRules</AfterAddIisSettingAndFileContentsToSourceManifest>

और अब छोड़ें नियम ( आपके .pubxml में <Target>एक बच्चा है <Project>): ( आप <SkipAction>सभी कार्यों के लिए स्किप को खाली छोड़ने में सक्षम हो सकते हैं, लेकिन मैंने यह परीक्षण नहीं किया है और मुझे यकीन नहीं है।

  <Target Name="AddCustomSkipRules">
    <Message Text="Adding Custom Skip Rules" />
    <ItemGroup>
      <MsDeploySkipRules Include="SkipConfigFolder">
        <SkipAction>Delete</SkipAction>
        <ObjectName>dirPath</ObjectName>
        <AbsolutePath>$(_DestinationContentPath)\\Config</AbsolutePath>
        <XPath>
        </XPath>
      </MsDeploySkipRules>
      <MsDeploySkipRules Include="SkipPhotosFolder">
        <SkipAction>Delete</SkipAction>
        <ObjectName>dirPath</ObjectName>
        <AbsolutePath>$(_DestinationContentPath)\\Photos</AbsolutePath>
        <XPath>
        </XPath>
      </MsDeploySkipRules>
      <MsDeploySkipRules Include="SkipWebConfig">
        <SkipAction>Delete</SkipAction>
        <ObjectName>filePath</ObjectName>
        <AbsolutePath>$(_DestinationContentPath)\\Web\.config</AbsolutePath>
        <XPath>
        </XPath>
      </MsDeploySkipRules>
      <MsDeploySkipRules Include="SkipWebConfig">
        <SkipAction>Delete</SkipAction>
        <ObjectName>dirPath</ObjectName>
        <AbsolutePath>$(_DestinationContentPath)\\Temp</AbsolutePath>
        <XPath>
        </XPath>
      </MsDeploySkipRules>
    </ItemGroup>
  </Target>

और कृपया, .एक फ़ाइलपैथ से बचने के लिए मत भूलना बैकस्लैश के साथ नियम छोड़ें।


11

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

चरण 1: अपनी 'वेब साइट' को 'वेब एप्लिकेशन' में बदलें। इसे परिवर्तित करने के लिए मैंने बस एक नया "वेब एप्लिकेशन" बनाया, जो सभी फ़ाइलें इसे अपने आप बना देता है, और इनकी वेब साइट को कॉपी और पेस्ट करता है। ध्यान दें कि रिपोर्ट फ़ाइलों को "कंटेंट" के बजाय "नहीं" पर अपने बिल्ड एक्शन को सेट करना होगा।

चरण 2: अब आप किसी भी फाइल को "एक्शन बिल्ड" कर सकते हैं।

उम्मीद है की यह मदद करेगा।


7

विज़ुअल स्टूडियो 2013 में, मैंने कीथ के उत्तर को पाया, ExcludeFoldersFromDeploymentप्रोजेक्ट फ़ाइल में तत्व जोड़कर , काम नहीं किया (मैंने ब्रायन ओग्डेन के उत्तर को नहीं पढ़ा है जो यह कहता है)। हालाँकि, मैंने पाया कि जब मैं केवल पाठ फ़ाइल पर निम्न गुण सेट करके Visual Studio 2013 में प्रकाशित कर रहा हूँ, तो मैं एक पाठ फ़ाइल को बाहर कर सकता हूँ:

1) बिल्ड एक्शन: कोई नहीं

2) आउटपुट डायरेक्टरी को कॉपी करें: कॉपी न करें

प्रारंभ में मैंने अपने आप ही कॉपी को आउटपुट डायरेक्टरी प्रॉपर्टी में सेट करने की कोशिश की, लेकिन जब बिल्ड एक्शन डिफ़ॉल्ट मूल्य, सामग्री पर सेट किया गया था, तब काम नहीं किया। जब मैंने तब बिल्ड एक्शन सेट किया था, जब मैंने प्रकाशित किया था तब टेक्स्ट फ़ाइल को गंतव्य फ़ोल्डर में कॉपी नहीं किया गया था।

Visual Studio GUI में इन गुणों को देखने के लिए, आप जिस फ़ाइल को बाहर करना चाहते हैं, उसे राइट-क्लिक करें और संदर्भ मेनू से गुण चुनें।


यह Visual Studio 2015 में Azure के प्रकाशन के लिए काम करता है।
क्रिस

2
समस्या तब होती है जब आपको केवल निश्चित लक्ष्य वातावरण (बिल्ड कॉन्फ़िगरेशन) के लिए बाहर की गई फ़ाइलों की आवश्यकता होती है। यह दर्दनाक है।
बेन्लेमल्लम

5

मुझे लगता है कि आपके पास यहां केवल दो विकल्प हैं:

  • 'प्रोजेक्ट से बाहर निकालें' सुविधा का उपयोग करें। यह आदर्श नहीं है क्योंकि प्रोजेक्ट आइटम को किसी भी एकीकृत आईडीई स्रोत नियंत्रण संचालन से बाहर रखा जाएगा। यदि आपको समाधान एक्सप्लोरर में फ़ाइलों को देखने की आवश्यकता है, तो आपको समाधान विंडो पर 'शो ऑल फाइल्स' बटन पर क्लिक करने की आवश्यकता होगी, लेकिन यह उन फ़ाइलों और फ़ोल्डरों को भी दिखाता है, जिनमें आपकी रुचि नहीं है।
  • किसी भी ऐसे प्रोजेक्ट आइटम को हटाने के लिए पोस्ट-बिल्ड ईवेंट स्क्रिप्ट का उपयोग करें, जिसे आप प्रकाशित नहीं करना चाहते हैं (यह मानकर कि आप किसी स्थानीय फ़ोल्डर में प्रकाशित हो रहे हैं, फिर सर्वर पर अपलोड हो रहे हैं)।

मैं इसके माध्यम से पहले आया हूं और वास्तव में कुछ भी सुंदर नहीं आया।


2

विज़ुअल स्टूडियो 2017, वेबएप पब्लिश के लिए , पहले एक मानक फाइल सिस्टम पब्लिश प्रोफाइल बनाएं। App_Data \ PublishProfiles \ फ़ोल्डर पर जाएं और [profilename] .pubxml फ़ाइल को संपादित करें।

जोड़ना

<ExcludeFilesFromDeployment>[file1.ext];[file2.ext];[file(n).ext]</ExcludeFilesFromDeployment>

टैग के तहत <PropertyGroup> आप केवल एक बार इस टैग को निर्दिष्ट कर सकते हैं, अन्यथा यह केवल पिछले एक के मूल्यों को ले जाएगा।

उदाहरण:

<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>
    <ExcludeApp_Data>True</ExcludeApp_Data>
    <publishUrl>C:\inetput\mysite</publishUrl>
    <DeleteExistingFiles>False</DeleteExistingFiles>
    <ExcludeFilesFromDeployment>web.config;mysite.sln;App_Code\DevClass.cs;</ExcludeFilesFromDeployment>
  </PropertyGroup>
</Project>

सुनिश्चित करें कि DeleteExistingFiles टैग को गलत पर सेट किया गया है


Nico आप GP से हैं? MCI के लिए काम किया?
नामीबिया

1

यदि आप देख रहे हैं कि आपकी परियोजना "वेब अनुप्रयोग" के रूप में बनाई गई है तो मौजूद है। वेब साइट "प्रोजेक्ट्स" केवल उन फाइलों का एक संग्रह है जो 1: 1 के बारे में सोचा जाता है जो एक वेब सर्वर पर तैनात हो जाता है।

कार्यक्षमता के संदर्भ में दोनों समान हैं, हालांकि एक वेब एप्लिकेशन सभी स्रोत कोड को एक DLL में संकलित करता है, इसके बजाय नग्न स्रोत कोड फ़ाइलों को वेब सर्वर पर कॉपी किया जाता है और आवश्यकतानुसार संकलित किया जाता है।


1

यह यहाँ अन्य उपयोगी उत्तर के लिए सिर्फ एक परिशिष्ट है और मुझे उपयोगी कुछ मिला है ...

अपवर्जित फ़ाइलों और फ़ोल्डरों के लिए wpp.targets का उपयोग करना

जब आपके पास अलग-अलग वातावरणों के लिए एक से अधिक तैनाती होती है, तो यह केवल एक सामान्य फ़ाइल के लिए सहायक होती है, जहाँ आप सभी बहिष्कृत फ़ाइलों और फ़ोल्डरों को सेट कर सकते हैं। आप *.wpp.targetsनीचे दिए गए उदाहरण की तरह परियोजना की जड़ में एक फ़ाइल बनाकर ऐसा कर सकते हैं ।

अधिक जानकारी के लिए यह Microsoft गाइड देखें:

कैसे: प्रकाशित प्रोफ़ाइल (.pubxml) फ़ाइलों और .wpp.targets फ़ाइल में दृश्य स्टूडियो प्रोजेक्ट में परिनियोजन सेटिंग्स संपादित करें

<?xml version="1.0" encoding="utf-8" ?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <EnableMSDeployAppOffline>True</EnableMSDeployAppOffline>
    <ExcludeFilesFromDeployment>
      *.config;
      *.targets;
      *.default;
    </ExcludeFilesFromDeployment>
    <ExcludeFoldersFromDeployment>
      images;
      videos;
      uploads;
    </ExcludeFoldersFromDeployment>
  </PropertyGroup>
</Project>

0

दृश्य स्टूडियो 2017 (मेरे मामले में 15.9.3) में .csproj- फाइल का हेरफेर वास्तव में ठीक काम करता है! Pubxml को संशोधित करने की आवश्यकता नहीं है।

फिर आप संपत्ति समूह स्थिति का उपयोग करते हुए .csproj- फाइल में बहुत अच्छी सेटिंग्स का निर्माण कर सकते हैं, जैसे:

  <PropertyGroup Condition="$(Configuration.StartsWith('Pub_'))">
    <ExcludeFoldersFromDeployment>Samples</ExcludeFoldersFromDeployment>
  </PropertyGroup>

"पब _" के साथ शुरू होने वाले कॉन्फ़िगरेशन के साथ सभी नमूनों से "नमूने" फ़ोल्डर को बाहर कर देता है ...


मैं सत्यापित करता हूं कि यह "स्थिति" संपत्ति को लागू किए बिना विज़ुअल स्टूडियो 2017 के लिए काम करता है।
एर्डेम काया

0

एक समकालीन उत्तर के रूप में, .net कोर साइट के साथ विजुअल स्टूडियो 2017 में:

आप इसे csproj, जहां CopyToPublishDirectory कभी नहीं है, में प्रकाशित होने से बाहर कर सकते हैं।

  <ItemGroup>
    <Content Update="appsettings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
    </Content>
    <Content Update="appsettings.Local.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </Content>
  </ItemGroup>

इस पर यहां और अधिक विस्तार से चर्चा की गई है: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/visual-studio-publish-profiles?view=aspnetcore-2.2

<PropertyGroup>
    <ExcludeFilesFromDeployment>appsettings.Local.json</ExcludeFilesFromDeployment>
</PropertyGroup>

पहले के सुझाव मेरे लिए काम नहीं करते थे, मैं अनुमान लगा रहा हूं क्योंकि दृश्य स्टूडियो अब एक अलग प्रकाशन तंत्र का उपयोग कर रहा है, मैं "डॉटनेट पब्लिश" क्ली टूल या समकक्ष के नीचे मौजूद हूं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.