2011-05-07 21 views
5

लाइब्रेरी असेंबली को refering करते समय, यह अंतिम बिन निर्देशिका में स्वतः कॉपी किया गया है। हालांकि * .dll.config नहीं है, क्या इस कॉन्फ़िगरेशन फ़ाइल को स्वचालित रूप से कॉपी करने का कोई तरीका है?क्या हम * .dll.config को ऑटोकॉपी कर सकते हैं?

उत्तर

1

विजुअल स्टूडियो में, जब आपके पास सक्रिय फ़ाइल खुलती है तो 'गुण' अनुभाग होता है। App.config के लिए, यह विकल्प हैं

  • Do Not Copy
  • Copy if Newer
  • Copy Always

आप या तो दूसरा या तीसरा विकल्प चाहते हैं, एक संपत्ति Copy to Output Directory कहा जाता है।

+6

लेकिन उन विकल्पों बिन निर्देशिका में जाने के लिए मौजूदा समाधान में एक परियोजना में एक फ़ाइल के लिए कर रहे हैं; बाहरी डीएलएस के लिए नहीं, आप संदर्भ जोड़ें विकल्प का उपयोग कर संदर्भ दे सकते हैं। –

1

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

+0

मेरे पास डीएलएल के लिए कॉन्फ़िगरेशन फ़ाइल क्यों नहीं हो सकती है? उसमें क्या समस्या है? जैसा कि आप जानते हैं कि एएसपी.नेट वेब साइट्स को डीएलएस में संकलित किया गया है। क्या आप कह रहे हैं कि वेब कॉन्फ़िगरेशन मौजूद नहीं है? – oleksii

+0

समस्या यह है कि यह समर्थित नहीं है। एएसपी.नेट एक अलग सीएलआर होस्ट है, इसमें अलग-अलग नियम हैं। –

1

मुझे एक ही समस्या थी। आप एक स्थिति हो सकती है जब गुण आपको app.config की प्रतिलिपि बनाने में मदद नहीं करेगा जहां आपको इसकी आवश्यकता है। जैसे कि जब आप एकीकरण इकाई परीक्षण करते हैं।

  1. उपयोग पद निर्माण घटना

    कॉपी/Y "$ (ProjectDir) App.config" ".... \ परीक्षण \ डीबग \ $ (TargetFileName): तो फिर आपके पास दो विकल्प हो सकता है। config "

  2. मैन्युअल libA.Test.dll

को libA.dll से कॉन्फ़िग फ़ाइल वर्गों कॉपी मैं 2 का उपयोग कर के रूप में यह करने के लिए और अधिक मजबूत साबित हुई खत्म मुझे।

3

dll प्रोजेक्ट में [dllname] .dll.config में app.config का नाम बदलें। उसी फ़ाइल के गुणों को "हमेशा कॉपी करें" और पुनर्निर्माण में बदलें। मेरे लिए बहुत अच्छा काम करता है। मैंने वीएस में सेटिंग डायलॉग के माध्यम से एक और सेटिंग जोड़ने का भी प्रयास किया और यह ठीक से अपडेट किया गया, भले ही यह ऐप.कॉन्फिग नहीं था। वीटी2013 अपडेट का उपयोग कर बीटीडब्ल्यू 3.

एक समान काम करने का एक और तरीका प्रोजेक्ट फ़ोल्डर में [dllname] .dll.config के साथ एक हार्डलिंक फ़ाइल बनाना है और उस पर गुणों को उस समय "हमेशा कॉपी करें" में बदलना है आपके पास अभी भी सामान्य रूप से आपका app.config है लेकिन यदि आपने इसे अपडेट किया है, तो यह आपके [dllname] .dll.config फ़ाइल को भी अपडेट करेगा। यहां एकमात्र असली चेतावनी यह है कि जब आप टीएफएस जैसे स्रोत नियंत्रण में चेक करते हैं तो यह हार्डलिंक को ट्रैक नहीं कर सकता है और आप गलती से लिंक को ओवरराइट कर सकते हैं। लेकिन फिर जब आप एक लिंक के रूप में "जोड़ और मौजूदा आइटम" करते हैं तो यह लिंक का सम्मान करता है ताकि यह आपकी स्थिति के लिए काम कर सके या नहीं। आप तय करें।

1

हालांकि मुझे देर हो चुकी है, लेकिन मेरा जवाब दूसरों की मदद कर सकता है। मैं पूर्व निर्माण घटना के रूप में निम्न आदेश का प्रयोग किया:

copy /Y $(SolutionDir)\[YOUR_LIBRARY_PROJECT]\app.config $(ProjectDir)$(OutputPath)[YOUR_LIBRARY_NAME].dll.config

मैं संभव के रूप में ज्यादा के रूप में गतिशील होने की कोशिश की, और उपरोक्त आदेश में काम किया।

2

पद निम्नलिखित में एक बेहतर जवाब है:

Visual Studio/MSBuild copy referenced class library's app.config as *.dll.config to bin folder of current project

// Add this <ItemGroup> at the end of your .csproj file before </Project> and after <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 
<ItemGroup> 
    <Content Include="app.config"> 
     <Link>$(TargetName).dll.config</Link> 
     <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </Content> 
</ItemGroup> 
+1

मैंने यह कोशिश नहीं की है, लेकिन ऐसा लगता है कि यदि आप धीमी चीता के साथ तैनाती पर फ़ाइल को बदलना चाहते हैं तो यह समस्याएं पेश कर सकती है। – emragins

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