अगर मैं स्टेटिक लाइब्रेरी
यह विशिष्ट त्रुटि आप प्राप्त नहीं है करने के लिए मोड पर स्विच जब आप प्रभाव में/CLR के साथ एक स्थिर पुस्तकालय का निर्माण करने का प्रयास करें। मुझे यह मानना होगा कि जब आप ऐसा करने का प्रयास करते हैं तो आपको प्राप्त होने वाली अचूक लिंकर त्रुटियों से छुटकारा पाने के लिए आप प्रोजेक्ट सेटिंग्स के साथ टंकण कर रहे हैं।
कोर मुद्दा यह है कि C++/CLI निर्माण प्रणाली स्थिर पुस्तकालयों कि MSIL शामिल का समर्थन नहीं करता है। प्रबंधित कोड एक लिंकर का उपयोग नहीं करता है, बाध्यकारी रनटाइम पर होता है। जो स्थैतिक पुस्तकालयों और डीएलएल के बीच आवश्यक अंतर गायब हो जाता है। इसलिए माइक्रोसॉफ्ट ने इसका समर्थन नहीं करने का फैसला किया क्योंकि इसे लागू करने के लिए ज्यादा समझ नहीं आया। दुर्भाग्यवश, जब भी आप इसे करने का प्रयास करते हैं तो वे जोर से चिल्लाते नहीं हैं, आपको जो लिंकर त्रुटियां मिलती हैं, वे उस संकेत के बारे में पर्याप्त संकेत नहीं देते हैं जो आपने गलत किया था। वर्कअराउंड, जैसे आईएलएमर्ज के साथ विलय करना या तो काम नहीं करता है, यह मिश्रित मोड असेंबली से निपट नहीं सकता है। मूल कोड अनुभागों और उनके संबंधित स्थानांतरण तालिका प्रविष्टियों को विलय करना बहुत ही अनैतिक है।
ध्यान रखें कि यह देशी स्थिर पुस्तकालयों से जोड़ने के लिए ठीक है। एक सामान्य सी ++/सीएलआई प्रोजेक्ट में केवल रेफ क्लास रैपर होते हैं जिन्हें प्रभाव में/clr के साथ बनाया जाना चाहिए। आप पुस्तकालयों से किसी भी मूल कोड को अंतिम असेंबली में चिपका सकते हैं।
मैं भी कई प्रोग्रामर एक और कारण यह है कि स्थिर पुस्तकालयों के निर्माण से कोई लेना देना नहीं है और उन्होंने मुझे टिप्पणी में परेशान कर रहे के लिए यह त्रुटि प्राप्त वास्तविक संकलन त्रुटि के बारे में सिद्धांत के लिए मजबूर कर रहा हूँ, ।
सावधान रहें कि आपके मशीन पर इंस्टॉल किए गए किसी भी .NET के .NET के एक अलग संस्करण को लक्षित करना काफी खतरनाक मामला है, खासकर यदि आप 4.0 को लक्षित करना चाहते हैं और आपके पास 4.5.x इंस्टॉल है। आपकी .vcxproj फ़ाइल में मुख्य तत्व <TargetFrameworkVersion>
है। यह अनुपलब्ध होगा यदि आपने पुराने .NET संस्करण को लक्षित करने वाली प्रोजेक्ट शुरू की है, तो आपको इसे स्वयं डालना होगा। आईडीई भी इसे बदलने अगर यह मौजूद है का समर्थन नहीं करता, फिर हाथ से संपादित करें।
कौन सा उचित संकलन आदेश पैदा करने में MSBuild मनाना करने के लिए पर्याप्त है। आप यह सत्यापित कर सकते हैं कि वह पनड-आउट अच्छी तरह से है, अपनी परियोजना के लिए डीबग बिल्ड निर्देशिका की * .tlog उपनिर्देशिका में देखें। Cl.command.1.tlog फ़ाइल संकलक को पास किए गए विकल्पों को दिखाती है।यह शामिल करना चाहिए:
/ऐ "C: \ प्रोग्राम फ़ाइलें (x86) \ संदर्भ विधानसभाओं \ Microsoft \ Framework.NETFramework \ v4.0"
/FU "C: \ प्रोग्राम फ़ाइलें (x86) \ संदर्भ सभाओं \ Microsoft \ Framework.NETFramework \ v4.0 \ mscorlib.dll "
नोट उपनिर्देशिका, बहुत ही महत्वपूर्ण यह अपने इच्छित नेट लक्ष्य से मेल खाने। इस उदाहरण में v4.0। और बहुत, यह बहुत महत्वपूर्ण है कि सी को इंगित करता है: \ windows \ microsoft.net, संदर्भ असेंबली के लिए विरासत स्थान।
जो वास्तविकता से आगे नहीं हो सकता है। मूल कोड के साथ विधानसभाओं को मर्ज करने के लिए वास्तव में बहुत आसान है (हालांकि वास्तव में इसकी अनुशंसा नहीं की जाती है) - मैंने इसे कई बार किया है, वास्तव में मेरे काम के हिस्से में सीएलआर-असेंबली में मूल कोड शामिल है - लेकिन उन्हें विलय करने से मुझे एक और बिल्ड-चरण जोड़ने के साथ छोड़ दिया गया जो मैं टालना चाहता था ... इसलिए मैंने प्रत्येक असेंबली को अलग-अलग संदर्भित करने का पारंपरिक तरीका चुना। – specializt
... और सी ++/सीएलआई के बारे में एक हिस्सा "इंटरऑप भाषा" होने का कोई मतलब नहीं है। मेथिंक आपको अपने चुने हुए विषयों का थोड़ा सा शोध करने की ज़रूरत है। (माइक्रोसॉफ्ट) इंटरऑप के पास भाषा-विनिर्देशों के साथ कुछ भी नहीं है, कोई भी "इंटरऑप भाषा" नहीं हो सकती है - इंटरपॉप भाषाओं के बीच एक ब्रिज के कुछ हद तक है। कृपया अपनी धारणाओं और कल्पनाओं को न बताएं जैसे कि वे कठिन तथ्य हैं ... – specializt
आप ranting हैं। इसके बजाय एक उत्तर पोस्ट करें। –