2012-09-24 17 views
10

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

हालांकि, अगर मैं प्रोजेक्ट में फ़ाइलों को/bin/में जोड़ता हूं, तो "आउटपुट में कॉपी करें" का चयन करें, फ़ाइलों को संकलित और बिन/बिन में प्रकाशित किया गया है। उन्हें मूल फ़ोल्डर कार्यों में जोड़ना, लेकिन शायद ही सही समाधान हो सकता है।

उन्हें निर्माण लक्ष्य "AfterBuild" को जोड़ना प्रकाशित करते समय कोई प्रभाव नहीं है (उदाहरण के लिए "तैनाती पैकेज का निर्माण")

यह भी जब TFS, जहां MSBuild लक्ष्य _CopyWebApplicationLegacy शुरू हो जाती है के माध्यम से समाधान के निर्माण के काम करने के लिए है।

उत्तर

7

समाधान चीजों का एक संयोजन मैं पहले से ही कोशिश की थी:

  • परियोजना
  • में "बिन" फ़ोल्डर शामिल करें (मैं उन्हें एक कड़ी के रूप में जोड़ा जरूरत फ़ाइलें हमारे विकास की वजह से जोड़े संरचना)
  • सेट निम्नलिखित गुण: "कार्रवाई बिल्ड = सामग्री" और "आउटपुट में कॉपी = कॉपी न करें"

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

जिस घटक की आवश्यकता है वह जीडीचित्र है, जो रनटाइम के दौरान कुछ देशी डीएलएल का उपयोग करता है।

+0

स्वच्छ, सरल समाधान। – AnthonyVO

+2

स्रोत नियंत्रण के तहत बिन फ़ोल्डर सहित अनावश्यक चेक-इन – Catherine

+7

बिन फ़ोल्डर कभी समाधान का हिस्सा नहीं होना चाहिए। यह सिर्फ एक आउटपुट फ़ोल्डर है। यदि आप टेस्ट केस, टीएफएस इत्यादि का उपयोग करते हैं तो आउटपुट फ़ोल्डर रीडायरेक्ट किया जाएगा। "कॉपी न करें" विकल्प को सेट करने से असेंबली असेंबली हो जाएगी। कहने के लिए खेद है: "बहुत बुरा विचार" – Fried

2

lib आपके समाधान या कार्यक्षेत्र में फ़ोल्डर को अपने तीसरे पक्ष के डीएलएस को रखने के लिए सामान्य है। फिर आप अपने प्रोजेक्ट से इस स्थान का संदर्भ जोड़ देंगे और यह सुनिश्चित करेंगे कि यह स्थान स्रोत नियंत्रण में है।

आप अपने लिए यह पैकेज करने के लिए NuGet का उपयोग करके भी देख सकते हैं, जो समाधान स्तर पैकेज फ़ोल्डर का स्वचालित रूप से उपयोग करता है।

+0

यह इन फ़ाइलों को ढूंढने के लिए बाहरी असेंबली के साथ मेरी सहायता कैसे करता है? –

+0

@Alex यदि आपके पास इन प्रोजेक्ट में संदर्भित इन फ़ाइलों को संदर्भित किया गया है तो यह उन्हें मिलेगा। क्या आप निर्दिष्ट कर सकते हैं कि ये कौन सी पुस्तकालय हैं? – dove

+0

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

0

इस आलेख के आधार पर http://sedodream.com/2010/05/01/WebDeploymentToolMSDeployBuildPackageIncludingExtraFilesOrExcludingSpecificFiles.aspx। Msbuild लक्ष्य को मुख्य रूप से (समाधान के निर्माण के क्रम में) परियोजना फ़ाइल को परिभाषित करना संभव है जो बिन फ़ोल्डर की सभी फ़ाइलों को कैप्चर करेगा। इस

<Target Name="CustomCollectFiles"> 
    <ItemGroup> 
     <_CustomFiles Include="$(OutDir)\**\*" /> 
     <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)"> 
     <DestinationRelativePath>$(OutDir)\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath> 
     </FilesForPackagingFromProject> 
    </ItemGroup> 
    </Target> 
    <PropertyGroup> 
    <CopyAllFilesToSingleFolderForPackageDependsOn> 
     CustomCollectFiles; 
     $(CopyAllFilesToSingleFolderForPackageDependsOn); 
    </CopyAllFilesToSingleFolderForPackageDependsOn> 
    </PropertyGroup> 

और रूट प्रोजेक्ट तत्व को बंद करने से पहले इसे रखें।