दिलचस्प पोस्ट
किसी तालिका में डायनामिक टेक्स्टबॉक्स के लिए क्लास सत्यापन सेट करें मैं C ++ में स्ट्रिंग को कैसे निर्धारित करूं? एक बिटमैप ऑब्जेक्ट के लिए एक छवि लोड करते समय स्मृति समस्या से बाहर अजीब प्रति चक्र में अधिकतम 4 एफएलओपी सैद्धांतिक अधिकतम कैसे प्राप्त करूं? एएसपी.नेट एमवीसी देखें इंजन तुलना जावास्क्रिप्ट में प्रारूप विनिर्देश के साथ मैं स्ट्रिंग को डेटटाइम में कैसे बदल सकता हूँ? क्या मेरे कंप्यूटर पर विजुअल स्टूडियो का संस्करण अजगर है? सी # चर नाम के सामने एक @ डाल कर क्या करता है? क्या विज्ञान -किटक-के-अर्थ क्लस्टरिंग सीखने का उपयोग कर अपनी खुद की दूरी तय करना संभव है? पता करें कि रेडियो बटन JQuery के साथ चेक किया गया है या नहीं? कंडीशनल लिंक क्वेरीज़ उपयोगकर्ता द्वारा पुश नोटिफिकेशन सक्षम किए जाने पर iPhone पर निर्धारित करें ग्रहण: एक स्थानीय संपत्ति के माध्यम से एक पुस्तकालय में स्रोत / javadoc संलग्न करें सी ++ में संकलन-समय स्ट्रिंग्स को आसान ढंग से घोषित करना क्या यह स्वीकार्य है और एसडब्ल्यू के तहत पीआईपी स्थापित करना सुरक्षित है?

समाधान में प्रोजेक्ट निर्भरता का उपयोग करते हुए MSBuild संदर्भों (DLL फ़ाइलों) को कॉपी नहीं करता है

मेरे दृश्य स्टूडियो समाधान में हर परियोजना है (हर कोई लक्ष्यीकरण। नेट 3.5) – मेरी समस्या के लिए केवल ये दो महत्वपूर्ण हैं:

  1. MyBaseProject <- यह क्लास लायब्रेरी एक तृतीय-पक्ष DLL फ़ाइल (elmah.dll) का संदर्भ देती है
  2. MyWebProject1 <- इस वेब अनुप्रयोग प्रोजेक्ट में मायबेज प्रोजेक्ट का एक संदर्भ है

मैंने "एलिमेंड। Dll" का चयन करते हुए "ब्राउज़ करें" टैब → "ब्राउज़ करें" टैब पर क्लिक करके "दृश्य स्टूडियो 2008 में MyBaseProject के elmah.dll संदर्भ को जोड़ा।"

Elmah संदर्भ की गुण इस प्रकार हैं:

  • उपनाम – वैश्विक
  • स्थानीय प्रतिलिपि – सही
  • संस्कृति –
  • विवरण – ASP.NET के लिए मॉड्यूल और हैंडलर (ELMAH) लॉगिंग करने में त्रुटि
  • फ़ाइल प्रकार – विधानसभा
  • पथ – डी: \ webs \ अन्य फ़ोल्डर \ _myPath \ __ उपकरण \ elmah \ Elmah.dll
  • हल – सच
  • क्रम संस्करण – v2.0.50727
  • निर्दिष्ट संस्करण – गलत
  • मजबूत नाम – गलत
  • संस्करण – 1.0.11211.0

MyWebProject1 में मैंने प्रोजेक्ट MyBaseProject के संदर्भ को जोड़ा: "संदर्भ जोड़ें …" → "प्रोजेक्ट्स" टैब → "MyBaseProject" का चयन करते हुए। इस संदर्भ के गुण निम्नलिखित सदस्यों को छोड़कर समान हैं:

  • विवरण –
  • पथ – डी: \ webs \ CMS \ MyBaseProject \ bin \ Debug \ MyBaseProject.dll
  • संस्करण – 1.0.0.0

अगर मैं विजुअल स्टूडियो में बिल्ड चलाता हूँ, तो mybaseproject.dll के साथ elmah.dll फ़ाइल मेरी MyWebProject1 की बिन निर्देशिका में कॉपी की जाती है!

हालांकि अगर मैं समाधान के लिए MSBuild को साफ और चलाता हूँ (डी: \ webs \ CMS> C: \ WINDOWS \ Microsoft.NET \ Framework \ v3.5 \ MSBuild.exe / t: ReBuild / p: कॉन्फ़िगरेशन = डीबग MyProject.sln ) elmah.dll MyWebProject1 की बिन निर्देशिका में गुम है – हालांकि निर्माण में कोई चेतावनी या त्रुटियाँ नहीं हैं!

मैंने पहले से ही सुनिश्चित कर लिया है कि MyBaseProject के .cproproject में "प्रामाणिक" मान के साथ निजी तत्व है (यह "स्टूडियो स्थानीय प्रतिलिपि " के लिए उपनाम होना चाहिए):

<Reference Include="Elmah, Version=1.0.11211.0, Culture=neutral, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> <HintPath>..\mypath\__tools\elmah\Elmah.dll</HintPath> **<Private>true</Private>** </Reference> 

(निजी टैग डिफ़ॉल्ट रूप से .csproj के XML में प्रकट नहीं हुआ था, हालांकि विजुअल स्टूडियो ने कहा "स्थानीय प्रतिलिपि" सत्य है। मैंने झूठी – सहेजी गई "स्थानीय की प्रतिलिपि" को बदल दिया – और उसे फिर से सच करने के लिए सेट – बचाओ!)

MSBuild में क्या गलत है? MyWebProject1 के बिन में कॉपी (elmah.dll) संदर्भ मैं कैसे प्राप्त करूं?

मैं प्रत्येक प्रोजेक्ट के पोस्टबिल्ल्ट कमांड में पोस्टबिल्लिक कॉपी एक्शन जोड़ना नहीं चाहता! (कल्पना कीजिए कि मेरे पास कई प्रोजेक्ट मायबेजप्रोजेक्ट पर निर्भर होंगे!)

वेब के समाधान से एकत्रित समाधान "समाधान में प्रोजेक्ट निर्भरता का उपयोग करते हुए MSBuild संदर्भों (DLL फ़ाइलों) को कॉपी नहीं करता है"

मुझे यकीन नहीं है कि विजुअल स्टूडियो और एमएसबिल्ड के बीच निर्माण के दौरान यह अलग क्यों है, लेकिन यहां मुझे जो मिला है, जब मैंने एमएसबिल्ड और विजुअल स्टूडियो में इस समस्या का सामना किया है

व्याख्या

नमूना परिदृश्य के लिए, मान लें कि हमारे पास परियोजना एक्स, विधानसभा ए और विधानसभा बी विधानसभा एक संदर्भ विधानसभा बी है, इसलिए प्रोजेक्ट एक्स में ए और बी दोनों के संदर्भ शामिल हैं। साथ ही, प्रोजेक्ट एक्स में कोड शामिल होता है जो संदर्भ विधानसभा ए (जैसे ए SomeFunction ())। अब, आप एक नया प्रोजेक्ट Y बनाते हैं जो प्रोजेक्ट X का संदर्भ देता है।

तो निर्भरता श्रृंखला इस तरह दिखती है: वाई => एक्स => ए => बी

विजुअल स्टूडियो / एमएसब्लूल्ड स्मार्ट होने की कोशिश करता है और केवल प्रोजेक्ट वाई में संदर्भ लाता है और इसे प्रोजेक्ट एक्स के लिए जरूरी मानता है; यह प्रोजेक्ट वाई में संदर्भ प्रदूषण से बचने के लिए करता है। समस्या यह है, क्योंकि परियोजना एक्स में वास्तव में कोई भी कोड नहीं है जो स्पष्ट रूप से विधानसभा बी का उपयोग करता है (जैसे B.SomeFunction ()), VS / MSBuild पता नहीं लगाता कि B आवश्यक है एक्स द्वारा, और इस तरह इसे प्रोजेक्ट वाई की बिन निर्देशिका में प्रतिलिपि नहीं करता; यह केवल एक्स और एक असेंबलियों को कॉपी करता है।

उपाय

इस समस्या को हल करने के लिए आपके पास दो विकल्प हैं, जिनमें से दोनों के परिणामस्वरूप विधानसभा बी को वाई के बिन डायरेक्टरी को कॉपी करने के लिए कॉपी किया जाएगा:

  1. प्रोजेक्ट वाई में असेंबली बी को संदर्भ जोड़ें
  2. प्रोजेक्ट एक्स में फ़ाइल को डमी कोड जोड़ें, जो विधानसभा बी का उपयोग करता है।

निजी तौर पर मैं कुछ कारणों के लिए विकल्प 2 पसंद करता हूं।

  1. यदि आप भविष्य में किसी अन्य प्रोजेक्ट को जोड़ते हैं जो प्रोजेक्ट एक्स एक्स संदर्भ देता है, तो आपको याद नहीं होगा कि विधानसभा बी के संदर्भ में भी आपको (जैसा कि विकल्प 1 के साथ करना होगा) को शामिल करना होगा।
  2. आप स्पष्ट रूप से कह सकते हैं कि डमी कोड को वहां क्यों होना चाहिए और इसे हटाने के लिए नहीं। इसलिए यदि कोई दुर्घटना के द्वारा कोड को हटा देता है (एक रिएक्टर टूल के साथ जो अप्रयुक्त कोड के लिए दिखता है), तो आप आसानी से स्रोत नियंत्रण से देख सकते हैं कि कोड की आवश्यकता है और इसे पुनर्स्थापित करने के लिए यदि आप विकल्प 1 का उपयोग करते हैं और कोई अप्रयुक्त संदर्भ को साफ करने के लिए किसी रिफैक्टर टूल का उपयोग करता है, तो आपके पास कोई टिप्पणी नहीं है; आप केवल देखेंगे कि संदर्भ को .csproj फ़ाइल से हटा दिया गया था।

यहां "डमी कोड" का एक नमूना है जिसे मैं आमतौर पर जोड़ता हूं जब मुझे इस स्थिति का सामना करना पड़ता है।

  // DO NOT DELETE THIS CODE UNLESS WE NO LONGER REQUIRE ASSEMBLY A!!! private void DummyFunctionToMakeSureReferencesGetCopiedProperly_DO_NOT_DELETE_THIS_CODE() { // Assembly A is used by this file, and that assembly depends on assembly B, // but this project does not have any code that explicitly references assembly B. Therefore, when another project references // this project, this project's assembly and the assembly A get copied to the project's bin directory, but not // assembly B. So in order to get the required assembly B copied over, we add some dummy code here (that never // gets called) that references assembly B; this will flag VS/MSBuild to copy the required assembly B over as well. var dummyType = typeof(B.SomeClass); Console.WriteLine(dummyType.FullName); } 

मैं इसे इस तरह से निपटना चाहता हूँ। अपने संदर्भ के गुणों पर जाएं और ऐसा करें:

 Set "Copy local = false" Save Set "Copy local = true" Save 

और बस।

दृश्य स्टूडियो 2010 शुरू में नहीं डालता है: संदर्भ टैग में <private>True</private> और "लोकल प्रतिलिपि" को सेट करने से इसे टैग बनाने के लिए कारण होता है। बाद में इसे सही और झूठे अनुसार सेट कर देगा।

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

आपके elmah.dll संदर्भ के लिए यदि आप इसे सीधे कोड में संदर्भित नहीं कर रहे हैं, तो आप इसे अपने प्रोजेक्ट में एक आइटम के रूप में जोड़ सकते हैं और Content लिए बिल्ड एक्शन सेट कर सकते हैं और आउटपुट निर्देशिका की प्रति Always

पर एक नज़र डालें:

इस MSBuild मंच थ्रेड मैं शुरू कर दिया

आप मेरे अस्थायी समाधान / समाधान मिलेंगे!

(MyBaseProject को कुछ कोड की आवश्यकता है जो elmah.dll से कुछ वर्गों (जो कुछ भी) को संदर्भित करता है elmah.dll को MyWebProject1 के बिन में कॉपी किया जा रहा है!)

मुझे भी यही समस्या थी।

जांचें कि क्या आपकी परियोजना का ढांचा संस्करण संदर्भ में डाले जाने वाले डीएलएल के रूपरेखा संस्करण के समान है।

मेरे मामले में, मेरे क्लाइंट को "फ्रेमवर्क 4 क्लाइंट" का उपयोग करके संकलित किया गया था और डीएलएल "फ्रेमवर्क 4" में था।

मैं जो समस्या का सामना कर रहा था वह मेरे पास एक परियोजना थी जो लाइब्रेरी परियोजना पर निर्भर है। बनाने के लिए मैं इन चरणों का पालन कर रहा था:

 msbuild.exe myproject.vbproj /T:Rebuild msbuild.exe myproject.vbproj /T:Package 

बेशक यह मतलब था कि मैं अपनी लाइब्रेरी की डेल फाइलों को बिन में लापता था और सबसे ज़रूरी तौर पर पैकेज ज़िप फ़ाइल में। मैंने यह काम पूरी तरह से पाया:

 msbuild.exe myproject.vbproj /T:Rebuild;Package 

मुझे नहीं पता कि यह काम क्यों है या यह पहली जगह क्यों नहीं था। लेकिन उम्मीद है कि मदद करता है

जैसा एलेक्स बर्ट्सव एक टिप्पणी में उल्लिखित है जो केवल एक्सएएमएल संसाधन डिक्शनरी में प्रयोग किया जाता है, या मेरे मामले में, कुछ भी जो एक्सएएमएल में इस्तेमाल होता है और इसके पीछे कोड में नहीं है, को MSBuild द्वारा 'प्रयोग में' माना नहीं जाता है

तो बस कुछ कोड के पीछे विधानसभा में एक वर्ग / घटक के लिए एक डमी संदर्भ बना रहा था, पर्याप्त रूप से MSBuild को समझना था कि असेंबली वास्तव में प्रयोग में थी।

.NET Framework 4 क्लाइंट प्रोफ़ाइल से .NET Framework 4 के लिए लक्ष्य ढांचे को बदलने के लिए मेरे लिए इस समस्या को हल किया।

तो आपके उदाहरण में: MyWebProject1 पर लक्ष्य ढांचे को .NET Framework 4 पर सेट करें

मुझे सिर्फ एक ही समस्या थी और यह इस तथ्य से उत्पन्न हो गया कि एक ही समाधान में 2 परियोजनाएं तृतीय पक्ष पुस्तकालय के एक अलग संस्करण को संदर्भित कर रही थीं।

एक बार जब मैंने सभी संदर्भों को ठीक किया तो सबकुछ पूरी तरह से काम किया।

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

इसके लिए एक .targets फ़ाइल को अपने प्रोजेक्ट में जोड़ने की आवश्यकता है और इसे प्रोजेक्ट में शामिल करने के लिए सेटिंग में अनुभाग शामिल हैं

प्रक्रिया के लिए यहां मेरा उत्तर देखें

बिल्डिंग के दौरान उपयोग नहीं किए जाने वाले विधानसभाओं को संदर्भित करना सही अभ्यास नहीं है। आपको अपनी बिल्ड फ़ाइल को बढ़ाया जाना चाहिए ताकि वह अतिरिक्त फ़ाइलें कॉपी करे। एक पोस्ट बिल्ड इवेंट का उपयोग करके या गुण समूह को अपडेट करके

कुछ उदाहरण अन्य पोस्ट में मिल सकते हैं

  • परियोजना निर्भरता के भाग के रूप में गतिशील रूप से जेनरेट की गई फ़ाइलों को कॉपी करने के लिए MSBuild
  • VS2010 प्रोजेक्ट में फ़ाइलों को शामिल करने के लिए, इन्हें बिल्ड या प्रकाशित करने के दौरान स्वचालित रूप से आउटपुट डायरेक्टरी बनाने के लिए प्रतिलिपि बनाएं

घातक दाग की योजना का उपयोग करना,

वाई => एक्स => ए => बी ,

मेरी समस्या तब थी जब मैंने वाई बनाया था, एक्स से एक्सएमएल (ए और बी, उनमें से सभी 15) वाई के बिन फ़ोल्डर में प्रदर्शित नहीं हुए थे।

मुझे इसे वाई से संदर्भ X को हटाने, बचाने, निर्माण, फिर एक्स संदर्भ (एक प्रोजेक्ट संदर्भ) को जोड़ने, और सहेज, निर्माण और ए और बी वाई के बिन फ़ोल्डर में दिखाना शुरू कर दिया।

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

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

जहां प्रोजेक्ट X और प्रोजेक्टवाई की माता-पिता / बाल निर्देशिकाएं हैं, और प्रोजेक्टएक्स संदर्भ A.dll जो बारी-बारी से संदर्भित करती है B.dll, और B.dll निर्देशिका संरचना से बाहर है, जैसे कि रूट (पैकेज) पर एक Nuget पैकेज में, फिर ए डीएलएल को शामिल किया जाएगा, लेकिन बीडीएल नहीं होगा।

मैं बस एक बहुत ही इसी तरह की समस्या में भाग गया दृश्य स्टूडियो 2010 का इस्तेमाल करते समय, DLL फ़ाइल को bin फ़ोल्डर में शामिल किया गया था। लेकिन जब MSBuild तीसरी पार्टी DLL फ़ाइल का उपयोग कर संकलन शामिल नहीं किया गया था।

अधिक निराश। जिस तरह से मैं इसे हल करता था, उसमें मेरा वेब प्रोजेक्ट में पैकेज के लिए NuGet संदर्भ को शामिल करना था, भले ही मैं इसे सीधे उपयोग नहीं कर रहा हूं।

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

मेरे पास एक asp.net अनुप्रयोग है निर्माण प्रक्रिया को साफ करने और फिर निर्माण करने के लिए सेट है

मेरे पास दो जेनकिंस सीआई स्क्रिप्ट हैं I उत्पादन के लिए एक और मंचन के लिए एक मैंने अपने आवेदन को मंचन पर लगाया और सबकुछ ठीक काम किया। उत्पादन के लिए तैनात और एक DLL फाइल जो संदर्भित था गायब था। यह DLL फ़ाइल परियोजना की जड़ में थी। किसी भी NuGet रिपॉजिटरी में नहीं DLL को do not copy करने के do not copy सेट किया गया था।

सीआई स्क्रिप्ट और आवेदन दो तैनाती के बीच ही था। स्टेजिंग पर्यावरण में साफ और तैनात होने के बाद भी डीएलएल फाइल को एएसपी.नेट अनुप्रयोग ( bin/ ) के परिनियोजन स्थान में बदल दिया गया था। यह उत्पादन पर्यावरण के लिए मामला नहीं था।

यह एक परीक्षण शाखा में निकलता है, मैंने इस डीएलएल फ़ाइल को bin निर्देशिका में प्रतिलिपि बनाने के लिए बिल्ड प्रक्रिया के लिए एक कदम जोड़ा था। अब वह हिस्सा जिसने थोड़ी देर ली है। सीआई प्रक्रिया खुद को सफाई नहीं कर रही थी DLL कार्य निर्देशिका में छोड़ दिया गया था और गलती से एएसपी.नेट। ज़िप फ़ाइल के साथ पैक किया जा रहा था। प्रोडक्शन शाखा में डीएलएल फ़ाइल की प्रतिलिपि कभी नहीं हुई थी और कभी भी यह गलती से तैनात नहीं थी।

TLDR; जांचें और सुनिश्चित करें कि आप जानते हैं कि आपका बिल्ड सर्वर क्या कर रहा है

वेबसाइट प्रोजेक्ट में आपके प्रोजेक्टरेफरेंस से सभी संदर्भित DLL फ़ाइलों को शामिल करना हमेशा एक अच्छा विचार नहीं है, खासकर जब आप निर्भरता इंजेक्शन का उपयोग कर रहे हैं: आपकी वेब प्रोजेक्ट केवल इंटरफ़ेस DLL फ़ाइल / प्रोजेक्ट का कोई संदर्भ जोड़ना चाहे, कोई ठोस कार्यान्वयन डीएलएल नहीं फ़ाइल।

क्योंकि यदि आप एक कार्यान्वयन DLL फ़ाइल / प्रोजेक्ट में सीधे कोई संदर्भ जोड़ते हैं, तो आप अपने डेवलपर को इंटरफ़ेस के बजाय कार्यान्वयन DLL फ़ाइल / प्रोजेक्ट के ठोस वर्गों पर "नया" कॉल करने से रोक नहीं सकते। कार्यान्वयन का उपयोग करने के लिए आपने अपनी वेबसाइट में "हार्डकोड" भी कहा है।